2011-03-22 59 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。在例外中沒有可用的信息來試圖解決這個問題。

我已經完成了這之前,它已經工作。我不知道我在這裏有什麼不同。

此處的進一步發現顯示它與複雜變量類型有關。簡單的內置變量類型的作品。複合變量的定義沒有區別,但是我指的是通用文件中的定義。

+0

什麼是'cmd'? – SLaks 2011-03-22 12:56:07

+0

聽起來像傳遞給動態調用的類型是錯誤的。就像SLaks說的那樣,'cmd'的類型是什麼? – asawyer 2011-03-22 12:59:23

回答

0

嘗試

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

,你似乎並不具有過載,只需幾CMD。

+0

你是如此正確。我創建的變體僅用於測試。我添加了它,並得到相同的錯誤。 – Jeff 2011-03-22 13:13:14

2

AddString(cmd)只有在cmd實際上ExposedVariables的實例纔可以工作。有沒有超載只是

public void AddString(Command cmd) 

這是它看起來像你期待的。

這與複雜的變量類型無關 - 它與你試圖調用一個不存在的方法有關。在你提交給我們的那些數據中,你希望稱哪個超載?

0

如果您示例中的cmd變量是對Command實例的引用而非ExposedVariables實例,那麼調用是錯誤的。您沒有AddString超載,僅需Command