c++ - ATL/COM : MIDL compiler doesn't output UUID for dispinterface

标签 c++ visual-c++ visual-studio-2012 com atl

在为我的类触发的事件实现连接点时,我声明了一个 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/

相关文章:

c++ - 命名空间范围内的 constexpr 变量,有和没有显式内联定义

c++ - 什么是 &= 和 |=

visual-studio-2010 - Visual Studio 2010/2012 Git 插件

qt - 为 Visual Studio 2012 (x86) 编译 Qt 4.8.x

c++ - C++ 字符串文字的类型

c++ - promise 可以使用结构类型吗?

c++ - OpenGL 正交投影

c++ - 将 c 样式字符串传递给函数 C++

c++ - 如何显示非模态 CDialog?

c++ - 专门化非模板类的模板化构造函数