[英]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.