似乎COM_INTERFACE_ENTRY_IID和COM_INTERFACE_ENTRY2_IID都适用于从两个或多个类派生类的情况,每个类都派生自一个公共接口。像这样:
class CMyClass : public IPersistFile, public IPersistStream {
};
(IPersistStream和IPersistFile都来自IPersist)。
看起来我可以自由包含
COM_INTERFACE_ENTRY_IID( __uuidof( IPersist ), IPersistFile )
或
COM_INTERFACE_ENTRY2_IID( __uuidof( IPersist ), IPersist, IPersistFile )
进入我班级的COM地图,它可以正常工作。
两者之间有什么区别吗?
答案 0 :(得分:2)
根据ATL Internals(你绝对应该得到的一本书,根据你在这里提出的问题 - 大部分内容都已经完全覆盖!),这两本书大致相同。
ATL Internals的作者说:
自COM_INTERFACE_ENTRY2 [_IID]以来 除了提供额外的功能 由...提供 COM_INTERFACE_ENTRY [_IID],我倾向于 总是使用后者而忘记了 前者。
我认为他们的意思是说如果你使用COM_INTERFACE_ENTRY_IID,你已经选择了分支,所以COM_INTERFACE_ENTRY2 [_IID]系列不会添加任何内容。但COM_INTERFACE_ENTRY2使用COM_INTERFACE_ENTRY_IID更简单。