Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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++ 查找uuid';用于imapi2 com对象的s/Header或获取uuuIdof以处理mingw_C++_Mingw_Comobject_Imapi - Fatal编程技术网

C++ 查找uuid';用于imapi2 com对象的s/Header或获取uuuIdof以处理mingw

C++ 查找uuid';用于imapi2 com对象的s/Header或获取uuuIdof以处理mingw,c++,mingw,comobject,imapi,C++,Mingw,Comobject,Imapi,我正在尝试从mingw项目访问imapi2 com对象。我试图遵循一个VisualStudio示例。我在MicrosoftSDK7.1中找到了imapi2头文件,但它们似乎没有uuid。我看到的示例是在创建对象时使用uuuidof查找uuid。像这样: CoCreateInstance(__uuidof(MsftDiscMaster2), NULL, CLSCTX_INPROC_SERVER, __uuidof(IDiscMaster2), (void**) &m_discMaster)

我正在尝试从mingw项目访问imapi2 com对象。我试图遵循一个VisualStudio示例。我在MicrosoftSDK7.1中找到了imapi2头文件,但它们似乎没有uuid。我看到的示例是在创建对象时使用uuuidof查找uuid。像这样:

CoCreateInstance(__uuidof(MsftDiscMaster2), NULL, CLSCTX_INPROC_SERVER, __uuidof(IDiscMaster2), (void**) &m_discMaster);
但我总是会出错,因为

对_guidconst&u mingw\u uuidof()的未定义引用

但是uuu mingw_uuuuidof的定义是

#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>();                                  \
    }                                                                  \
    }
#定义(类型,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)\
外部“C++”{\
模板内联常量GUID&\uuuu mingw\uuidof(){\
静态常数IID uuuid_uinst={l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}\
返回仪表\
}                                                                   \
模板内联常量GUID&\uuuu mingw\uuidof(){\
返回uuu mingw_uuidof()\
}                                                                  \
}
。。。在_mingw.h中,从“#define uu uuidof(type)uu mingw uuidof()”开始的几行

为什么mingw的定义不起作用

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


感谢微软平台SDK中的COM接口通常由.idl文件定义,它们使用midl从中生成.h文件。因此,要查找CLSID或IID值,请搜索idl文件。在本例中,imapi2.idl具有所需的guid,并且已用于生成具有以下内容的imapi2.h文件:

class DECLSPEC_UUID("2735412E-7F64-5B0F-8F00-5D77AFBE261E")
MsftDiscMaster2;
Microsoft编译器中的u_uidof扩展读取特定于编译器的declspec语句附加到类或结构的特定于编译器的数据。您可以使用以下方法执行这些操作:

struct declspec(uuid("{......}")) IMyInterfaceType;
因此,上面的DECLSPEC_UUID行将该guid附加到类

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

__CRT_UUID_DECL(MsftDiscMaster2, 0x2735412e, 0x7f64, 0x5b0f, 0x8f, 0x00, 0x5d, 0x77, 0xaf, 0xbe, 0x26, 0x1e);

在该语句之后,您将有一个
\uu uuidof(MsftDiscMaster2)
的定义,该定义将返回正确的uuid。

我要告诉您的可能重复之处是我需要从idl文件中生成一个头文件。MS SDK已经有一个imapi2.h文件。我在VisualStudio中创建了一个项目,它似乎没有生成更有用的头文件。然后我使用了midl,但它生成了一个非常类似imapi2.h的头文件。我找到了另一个可能的工具,但还没有时间尝试。谢谢@patthoys的回答。对于其他任何人来说,为了让它发挥作用,我将imapi2.h文件添加到我的项目中,然后找到我所需的每个com对象的id,并将编号从
类DECLSPEC_UUID(“2735412E-7F64-5B0F-8F00-5D77AFBE261E”)
类型命令复制到
\uu CRT_UUID_DECL(MsftDiscMaster2,0x2735412e,0x7f64,0x5b0f,0x8f,0x00,0x5d,0x77,0xaf,0xbe,0x26,0x1e);
命令。然后,我将所有这些uu CRT_UUID_DECL写入我自己的头文件。