我使用的輸出接口這樣的:自定義事件處理在COM C++
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IHehServerEvents
{
string EmptyEvent(object sender, CustomEventArgs args);
}
在PluginAPI.h >> 我有
具有暴露COM事件簽名C#.NET類class PluginAPI: public IHehServerEvents,public FB::JSAPIAuto//implemented the COM outgoing interface
{
//宣佈基於TLH文件
HRESULT __stdcall EmptyEvent(VARIANT sender,IUnknown * args, BSTR * pRetVal);
FB_JSAPI_EVENT(CSharpEvent, 2, (FB::variant,IUnknown *));
}
HRESULT ClassCpluss::EmptyEvent(BSTR message, BSTR * pRetVal)
{....}
我的事件^ h EmptyEvent方法在Firebreath聲明中的elper是
FB_JSAPI_EVENT(CSharpEvent, 2, (VARIANT,struct _EventArgs *));
我也看到了THIS link。 SO boost :: vairant是否支持右鍵?那麼如何將VARIANT轉換爲boost :: variant? 以上聲明中預期的任何更改? 如何在c#中使用VARIANT或結構來處理上述事件?任何示例都會有幫助..
當然知道boost :: function和boost :: bind.But你可以給我們一個鏈接/提供一個例子(在C++中處理COM事件),以及你在說什麼這個語句「讓它調用一個仿函數(看看boost :: bind和boost :: function)「 –
我還沒有做過任何處理C++中的COM事件。要查看使用仿函數的示例,請查看FireBreath代碼庫中的SimpleStreamsHelper類 - 它使用boost :: function回調函數。要查看它的使用情況,請查看它使用SimpleStreamsHelper的FBTestPlugin。 – taxilian