日期:2014-05-17  浏览次数:21174 次

C#调用OCX,传递函数地址给OCX中的函数,该怎么传?
VC写的OCX,其中一个函数的参数为long型,是回调函数的地址
C#中调用OCX时,将long型参数转换成了int型
现在C#调用这个OCX,该怎么吧C#中的回调函数的地址传递给这个int参数呢?
C#? OCX 回调函数

------解决方案--------------------
在C#里定义函数的托管,然后把托管函数定义(相当于c++函数指针)传过去

参考下面例子,long型你改好托管的类型

using System; 

using System.Runtime.InteropServices; 

public delegate bool CallBack(int hwnd, int lParam); 

public class EnumWindowsApp 



[DllImport("user32")] 

public static extern int EnumWindows(CallBack x, int y); 

public static void Main() 



CallBack myCallBack = new CallBack(EnumWindowsApp.Report); 

EnumWindows(myCallBack, 0); 



public static bool Report(int hwnd, int lParam) 



Console.Write("Window handle is :"); 

Console.WriteLine(hwnd); 

return true; 



}

------解决方案--------------------
用CreateInstance创建实例
用InvokeMember调用,
参数定义成object[],传你的long型试试。
------解决方案--------------------
   回调函数的地址当然是写在你OCX接口中了,return 返回,在C#中用适当的方法接受即可。