我正在尝试处理从C#服务器到C ++客户端的COM事件。我可以使用服务器regfree但我的事件不再有效。
以前,通过注册,事件是通过ATL的IDispEventImpl
在客户端处理的。
我还没有找到任何直接解决这个问题的文章,但我确实看到IConnectionPoint
本身并不需要注册的建议。
我还看到一些建议IDispEventSimpleImpl
可能无法正常工作。
答案 0 :(得分:2)
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
,它在没有类型库的情况下工作。