如何处理无限制的COM事件?

时间:2017-01-19 14:07:15

标签: com atl regfreecom registration-free-com

我正在尝试处理从C#服务器到C ++客户端的COM事件。我可以使用服务器regfree但我的事件不再有效。

以前,通过注册,事件是通过ATL的IDispEventImpl在客户端处理的。

我还没有找到任何直接解决这个问题的文章,但我确实看到IConnectionPoint本身并不需要注册的建议。

我还看到一些建议IDispEventSimpleImpl可能无法正常工作。

1 个答案:

答案 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,它在没有类型库的情况下工作。