0

在为从我的类触发的事件实现连接点时,我dispinterface在 IDL 中声明了一个,如下所示

[
  uuid(123-MY-GENERATED-GUID)
]
dispinterface _IMyChangeEvents {
properties:
methods:
  [id(1)] void ItemChanged([in] BSTR changeInformation);
};

根据几个来源,包括“ATL Internals”一书,这应该产生一个DIID__IMyChangeEvents我可以用来从ATL::IConnectionPointImpl<ImplClass, IID>. 但它既不存在,也不能 按照文档中的说明__uuidof(_IMyChangeEvents)CONNECTION_POINT_ENTRY宏中使用,因为它抱怨“没有 GUID 与此对象关联”。

实现这一点的正确方法是什么?

4

1 回答 1

2

此代码段是在 library{} 块内部还是外部?library{} 之外的所有内容都进入生成的 .h 文件。在 library{} 中定义或引用的所有内容都会进入生成的 .tlb 文件。

典型的 .IDL 文件如下所示:

interface IMyMainInterface {...};
dispinterface MyEvents {...};

library {
  coclass MyCoClass {
    [default] IMyMainInterface;
    [default, source] MyEvents;
  }
}

这样,为了方便客户,您将拥有 .h 和 .tlb 中的所有内容。

于 2013-07-07T18:33:24.613 回答