Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ATL/COM:MIDL编译器不';disp接口的t输出UUID_C++_Visual C++_Visual Studio 2012_Com_Atl - Fatal编程技术网

C++ ATL/COM:MIDL编译器不';disp接口的t输出UUID

C++ ATL/COM:MIDL编译器不';disp接口的t输出UUID,c++,visual-c++,visual-studio-2012,com,atl,C++,Visual C++,Visual Studio 2012,Com,Atl,在为类中激发的事件实现连接点时,我在IDL中声明了一个dispinterface,如下所示 [ uuid(123-MY-GENERATED-GUID) ] dispinterface _IMyChangeEvents { properties: methods: [id(1)] void ItemChanged([in] BSTR changeInformation); }; 根据包括《ATL Internals》一书在内的多个来源,这应该会生成一个DIID\uu IMyChangeE

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

[
  uuid(123-MY-GENERATED-GUID)
]
dispinterface _IMyChangeEvents {
properties:
methods:
  [id(1)] void ItemChanged([in] BSTR changeInformation);
};
根据包括《ATL Internals》一书在内的多个来源,这应该会生成一个
DIID\uu IMyChangeEvents
,然后我可以使用它从
ATL::IConnectionPointImpl
派生类。但它既不存在,也不能在
连接点\u条目中使用
\uuidof(\u imychangevents)
,如文档中所述,因为它抱怨“没有与此对象关联的GUID”


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

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

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

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

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

这样,你就可以拥有所有在.h和in .tb中的所有东西,为你的客户提供方便。

代码片段看起来不错,问题在别处:IDL没有编译,你不包括从IDL生成的C++文件等。我试着删除生成的头,并且在我构建这个项目时它被重新生成。但它只包含一个转发声明,既不包含MIDL_接口也不包含DECLSPEC_UUID。此外,文件中的其他接口也很好,关于此接口缺少GUID的投诉是唯一剩下的错误。因为上面的短代码片段看起来不错,您让我们猜测实际问题在哪里。您可能希望在线查看示例,例如我的示例。然后,你会看到UuID启用的代码“代码> diIDyIfioOcjvices <代码>,它被C++代码所包含,特别是通过<代码>·uuIDOF(…)>代码>。我现在发现这个链接让我更加困惑:尽管有点过时,但它显示了所显示的行为是正确的,我丢失了一些东西。但是,如果你说一切都是这样正确的,我将在另一个项目中尝试一些向导生成的代码。有趣的是,我也成功地尝试了另一种方法:让
库{}
块中的dispinterface和一个在外部发出事件的coclass。感谢您对生成过程的解释,我想我现在更了解它了。