【发布时间】:2017-02-07 22:12:00
【问题描述】:
我想在我的 VS2012 项目中使用 COM 对象。出于这些目的,我得到了一个描述对象的 IDL 文件。我已经使用 MIDL 生成了一个看起来(部分)像这样的头文件:
EXTERN_C const CLSID CLSID_COComponent;
#ifdef __cplusplus
class DECLSPEC_UUID("bla bla bla")
COComponent;
#endif
但是,当我将此标头包含到我的项目中并尝试在 CoCreateInstance 调用中使用 CLSID_COComponent 时:
CComPtr<IModelService> m_IModelService;
hRes = m_IModelService.CoCreateInstance(CLSID_COComponent, NULL, CLSCTX_ALL);
我收到一个链接器错误:
Error 123 error LNK2001: unresolved external symbol _CLSID_COComponent
但是,如果我使用__uuidof(COComponent),它可以正常工作。此外,当从生成的代码中删除 EXTERN_C 时,它会编译。
完全相同的代码已在不同的项目中使用,我已经看到它在其中工作。我的问题是,我做错了什么?
【问题讨论】:
-
MIDL 通常还会生成一个 .c 文件,其中包含 GUID 定义、/iid 命令行选项。似乎您没有将其包含在您的项目中。使用 __uuid 关键字确实是简单且完全有效的解决方法。
-
The Interface UUID File。通常具有
_i.c 格式。需要编译并链接到最终的可执行映像中。 -
太棒了,确实成功了!如果您将其发布为答案,我可以接受。
标签: windows visual-studio-2012 com idl