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#中用适当的方法接受即可。