2011-06-14 253 views
1

使用Invoke方法將類對象作爲參數發送的語法是什麼?傳遞類對象作爲使用C#的Invoke方法的參數

Invoke方法調用導致的錯誤:

"Object of type 'MSM_ns.MyParameterClass' cannot be converted to type 'MSM_ns.MyParameterClass'"

基本數據類型的參數做工精細,但複雜的數據類型會導致錯誤。

byte[] data = new byte[] { 0x01, 0x02, 0x03, 0x04 }; 

MyParameterClass myParams = new MyParametersClass("ABC", 123, 3.14159); 

// attach to the dll 
MethodInfo dllMethodInfo = Invoke.LoadDLL("MSM.dll", "MSM_ns", "MSMClass", "MSMMethod1"); 

// attach the parameters 
object[] parameters = new object[2]; 
parameters[0] = data; 
parameters[1] = myParams; 

// call the DLL 
bool result = (bool)dllMethodInfo.Invoke(null, parameters); 

-------- 

public static bool MSMMethod1(ref byte[] dataToVerify, MyParameterClass myParams) 
{ 
    . . . 
} 
+0

參數(幾乎肯定)不應該是'ref' – SLaks 2011-06-14 18:36:57

+0

什麼是'Invoke.LoadDLL'? – SLaks 2011-06-14 18:38:14

回答

0

您正在加載相同的程序集兩次,有兩個相同但不兼容的類型。

您只需加載程序集一次。

+0

// MethodInfo dllMethodInfo = Invoke.LoadDLL(「MSM.dll」,「MSM_ns」,「MSMClass」,「MSMMethod1」); 程序集dll = Assembly.LoadFile(「MSM.dll」); 類型classObj = dll.GetType(「MSM_ns」+「。」+「MSMClass」); MethodInfo dllMethodInfo = classObj.GetMethod(「MSMMethod1」); – 2011-06-14 18:57:11

+0

// MethodInfo dllMethodInfo = Invoke.LoadDLL(「MSM.dll」,「MSM_ns」,「MSMClass」,「MSMMethod1」); 程序集dll = Assembly.LoadFile(「MSM.dll」); 類型classObj = dll.GetType(「MSM_ns」+「。」+「MSMClass」); MethodInfo dllMethodInfo = classObj.GetMethod(「MSMMethod1」); – 2011-06-14 18:58:54

+0

http://blogs.msdn.com/b/suzcook/archive/2003/09/19/loadfile-vs-loadfrom.aspx – SLaks 2011-06-14 19:25:12