在为我的类触发的事件实现连接点时,我声明了一个 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 与该对象相关联”。
实现它的正确方法是什么?
最佳答案
此代码片段是在 library{} block 内部还是外部? library{} 之外的所有内容都会进入生成的 .h 文件。 library{} 中定义或引用的所有内容都会进入生成的 .tlb 文件。
典型的 .IDL 文件看起来像这样:
interface IMyMainInterface {...};
dispinterface MyEvents {...};
library {
coclass MyCoClass {
[default] IMyMainInterface;
[default, source] MyEvents;
}
}
这样,为了方便客户,您将拥有 .h 和 .tlb 中的所有内容。
关于c++ - ATL/COM : MIDL compiler doesn't output UUID for dispinterface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17302922/