我已經在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