首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找imapi2 com对象的uuid/headers,或使__uuidof在mingw上工作

查找imapi2 com对象的uuid/headers,或使__uuidof在mingw上工作
EN

Stack Overflow用户
提问于 2014-03-19 20:53:36
回答 1查看 2.2K关注 0票数 3

我正在尝试从一个混合项目访问imapi2 com对象。我试着模仿一个视觉工作室的例子。我在MicrosoftSDK7.1中找到了imapi2头文件,但它们似乎没有uuid,我看到的示例是在创建对象时使用__uuidof查找uuid。如下所示:

代码语言:javascript
复制
CoCreateInstance(__uuidof(MsftDiscMaster2), NULL, CLSCTX_INPROC_SERVER, __uuidof(IDiscMaster2), (void**) &m_discMaster);

但是我总是会收到一个错误,因为__uuidof就是

对_GUID const& __mingw_uuidof()的未定义引用。

但__mingw_uuidof被定义为..。

代码语言:javascript
复制
#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)           \
    extern "C++" {                                                      \
    template<> inline const GUID &__mingw_uuidof<type>() {              \
        static const IID __uuid_inst = {l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}}; \
        return __uuid_inst;                                             \
    }                                                                   \
    template<> inline const GUID &__mingw_uuidof<type*>() {             \
        return __mingw_uuidof<type>();                                  \
    }                                                                  \
    }

..。在_mingw.h中,"#define __uuidof(type) __mingw_uuidof<__typeof(type)>()“后面的几行

为什么__mingw_uuidof的混合定义不能工作?

有没有办法在sdk头文件中找到像DiscMaster这样的imapi对象的uuid?或者我需要一些其他的头文件。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-19 21:51:02

中的COM接口通常由.idl文件定义,它们使用midl生成.h文件。因此,只要查找CLSID或IID值,就可以搜索idl文件。在本例中,imapi2.idl具有所需的guid,它用于生成一个带以下内容的imapi2.h文件:

代码语言:javascript
复制
class DECLSPEC_UUID("2735412E-7F64-5B0F-8F00-5D77AFBE261E")
MsftDiscMaster2;

微软编译器中的__uuidof扩展读取编译器特定于类或结构的编译器特定数据,该数据由编译器特定的declspec语句附加。您可以使用以下方法来完成这些操作:

代码语言:javascript
复制
struct declspec(uuid("{......}")) IMyInterfaceType;

所以上面的DECLSPEC_UUID行将guid附加到类中。

您从mingw提供的示例代码提供了一个模板函数,该函数将返回给定类型的uuid,前提是您首先使用__CRT_UUID_DECL设置该类型。这可能是因为他们有一个系统可以自动调用这一点,但没有显示出来。考虑到我在您的示例中看到的情况,要让__uuidof为您需要添加的给定coclass工作:

代码语言:javascript
复制
__CRT_UUID_DECL(MsftDiscMaster2, 0x2735412e, 0x7f64, 0x5b0f, 0x8f, 0x00, 0x5d, 0x77, 0xaf, 0xbe, 0x26, 0x1e);

在该语句之后,您将得到__uuidof(MsftDiscMaster2)的定义,该定义将返回正确的uuid。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22517853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档