簡體   English   中英

COM c ++中的自定義事件處理

[英]Custom Event Handling in COM c++

我有一個帶有事件簽名的ac#.NET類,該簽名使用這樣的傳出接口向COM公開:

[ComVisible(true)]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IHehServerEvents
    {
       string EmptyEvent(object sender, CustomEventArgs args);
    }

在PluginAPI.h >>中,我有

class PluginAPI: public IHehServerEvents,public FB::JSAPIAuto//implemented the COM outgoing interface
{

//基於tlh文件聲明的EmptyEvent方法

 HRESULT __stdcall EmptyEvent(VARIANT sender,IUnknown * args, BSTR * pRetVal);
        FB_JSAPI_EVENT(CSharpEvent, 2, (FB::variant,IUnknown *));

    }
    HRESULT ClassCpluss::EmptyEvent(BSTR message, BSTR * pRetVal)
    {....}

我的Firebreath語句中的事件助手是

FB_JSAPI_EVENT(CSharpEvent, 2, (VARIANT,struct _EventArgs *));

我也看到了這個鏈接 SO boost :: vairant是否受支持,然后如何將VARIANT強制轉換為boost :: variant? 上述聲明中有什么變化? 如何通過使用VARIANT或struct在c#中處理上述事件?任何示例都將有所幫助。

不,不支持boost :: variant,不支持FB :: variant,這根本不是一回事。 FB :: variant實際上在內部使用boost :: any。

您正在嘗試將COM和FireBreath混合使用,但效果不會很好。 而是創建一個與您的COM對話的類,並從JSAPI對象中使用它。 處理對象中的事件並將其稱為函子(查看boost :: bind和boost :: function),或者使用boost中的信號和套接字。 有很多方法可以處理它,但是這里的關鍵是您需要首先獲取知道如何與COM通訊的C ++對象,然后從FireBreath使用該對象將很容易。 直接將VARIANT或任意struct類型與firebreath事件一起使用將永遠無法工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM