我已经在C++应用程序中使用的C++中创建了COM服务器。现在我必须向COM对象添加一个方法,其中一个参数必须是指向回调函数的函数指针。 C++原始功能如下所示:函数指针作为COM方法的参数
typedef int (__stdcall *tCallBackFunc)(int Param);
void MyFunc(void* CallBackFunc)
{
int Param;
//some code
((tCallBackFunc)(CallBackFunc))(Param); //call callback function
}
我需要添加MyFunc作为COM对象的方法。 VS VC++“添加方法”对话框为COM方法参数提供了一些预定义类型,例如“int *”或“bstr”,我尝试将“CallBackFunc”参数定义为“int *”类型,但是我无法使其工作C#:
public delegate int tCallBackFunc(int Param);
...
tCallBackFunc cb; //I will initialize it when it is compiled
MyCOMObject.MyFunc(cb); //cannot find any way to cast cb to "ref int"
看来,我用错误的做法,有没有声明函数指针在C++ COM对象方法的参数,然后在C#中使用它的快捷方式?
听起来不是一个简单的解决方案,我将不得不创建一个接口,然后在C#中使用它。我寻找最快的方法,我找到了一些如何在C#中使用EnumWindows API的文章(它需要回调函数),如果可能的话,使用相同的方法也可以,但我无法通过[声明](重新声明)COM方法[ DllImport] – Mike