我正在尝试处理从 C# 服务器到 C++ 客户端的 COM 事件。我可以使用服务器 regfree,但我的活动不再有效。
以前,通过注册,事件是通过IDispEventImpl
ATL 在客户端中处理的。
我无法找到任何直接解决此问题的文章,但我确实看到了一个IConnectionPoint
本质上不需要注册的建议。
我还看到了一些IDispEventSimpleImpl
可能适用于 regfree 的建议。
我正在尝试处理从 C# 服务器到 C++ 客户端的 COM 事件。我可以使用服务器 regfree,但我的活动不再有效。
以前,通过注册,事件是通过IDispEventImpl
ATL 在客户端中处理的。
我无法找到任何直接解决此问题的文章,但我确实看到了一个IConnectionPoint
本质上不需要注册的建议。
我还看到了一些IDispEventSimpleImpl
可能适用于 regfree 的建议。
IDispEventImpl
需要访问类型库。您需要在服务器清单中包含一个引用,以便可以将其加载到激活上下文中:
<file name="mydll.tlb">
<typelib
tlbid="{TLBID}"
version="1.0"
helpdir=""
flags="hasdiskimage"/>
</file>
您的客户端接收器也需要使用 typelib ID 声明:
class CMySink: public IDispEventImpl<1, CMySink, &IID_IEvent, &TLBID, 1, 0>
作为替代方案,您还可以实现IDispEventSimpleImpl
,它在没有类型库的情况下工作。