2011-03-22 4 views
0

동적 메서드 호출을 사용하여 동적으로로드 된 dll의 메서드에 액세스하고 있습니다.동적 메서드 호출이 매개 변수와 함께 실패합니다.

내가 뭐하는 거지 :

  dynamic classInstance = Activator.CreateInstance(cmd.Type); 

      classInstance.AddString(); //This line works 
      classInstance.AddString(cmd); //this line does not work 

을 DLL의 방법은 다음과 같습니다

public CustomCommandTest1() 
    { 

    } 
    public void AddString(Command cmd, ExposedVariables exv) 
    { 
     exv.ChopResults += "Add string Command"; 
    } 
    public void AddString(ExposedVariables exv) 
    { 
     exv.ChopResults += "Add string Command"; 
    } 
    public void AddString() 
    { 
     string ChopResults = "Add string Command"; 
    } 
내가 액세스 할 수 있습니다

(호출) 매개 변수를하지만 나에게를 제공 할 것과이없는 모든 방법 RuntimeBindingInternalCompilerException입니다. 예외를 알아낼 수있는 유용한 정보는 없습니다.

이전에 해본 적이 있는데 효과가있었습니다. 내가 여기서 무엇을하고 있는지 알지 못한다.

추가 발견은 복잡한 변수 유형과 관련이 있음을 나타냅니다. 간단한 내장 변수 유형이 작동합니다. 그러나 공통 파일의 정의를 참조 할 때 복잡한 변수의 정의에는 차이가 없습니다. 그냥 cmd를 걸리는 과부하를하지 않는 것으로

+0

'cmd'는 무엇입니까? – SLaks

+0

동적 호출로 전달하는 유형이 잘못되었습니다. SLaks와 마찬가지로 'cmd'의 유형은 무엇입니까? – asawyer

답변

0

ExposedVariables exv = new ExposedVariables(); 
classInstance.AddString(cmd, exv); 

을 시도합니다.

+0

당신은 정말 옳았습니다. 내가 만든 유사본은 테스트 용이었습니다. 나는 그것을 추가했고 나는 같은 오류를 얻는다. – Jeff

2

AddString(cmd)cmd인 경우 실제로는 인스턴스가 ExposedVariables 인 경우에만 작동 할 수 있습니다.

public void AddString(Command cmd) 

등의 과부하가 없습니다. 이는 예상 한 것입니다.

이것은 복잡한 변수 유형과는 아무런 관련이 없습니다. 존재하지 않는 메소드를 호출하려고 할 때와 관련이 있습니다. 어떤 과부하가 당신이 우리에게 선물 한 것 중에서 부름 받았을까요?

0

예제의 cmd 변수가 ExposedVariables 인스턴스가 아닌 Command 인스턴스에 대한 참조 인 경우 호출이 잘못되었습니다. 만 사용하는 AddString 과부하가 없습니다.

관련 문제