1

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

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

我无法找到任何直接解决此问题的文章,但我确实看到了一个IConnectionPoint本质上不需要注册的建议。

我还看到了一些IDispEventSimpleImpl可能适用于 regfree 的建议。

4

1 回答 1

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

于 2017-01-19T18:20:35.843 回答