在C ++中使用GUID:

时间:2013-02-15 09:03:32

标签: c# c++ winapi

我想问一下C ++中GUID的声明是否与C#不同。我在C#中遇到过这个:

GUID InterfaceClassGuid = {0x4d1e55b2, 0xf16f, 0x11cf, 0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}; 

这在C ++中是否可行?如果不是如何转换?感谢。

4 个答案:

答案 0 :(得分:3)

最简单的(也是方便的)是利用特定于MS的__declspec(uuid

class __declspec(uuid("{C1F400A4-3F08-11D3-9F0B-006008039E37}")) NullRenderer;
GUID x = __uuidof(NullRenderer);

这样您甚至不必在源代码中拆分GUID组件,而是将其作为真正的GUID声明。

答案 1 :(得分:2)

标准C ++中没有定义GUID类型。但是,您可以(也许某些编译器供应商)定义可以以相同方式初始化的struct GUID

修改Microsoft defines GUID如下:

typedef struct _GUID {
  DWORD Data1;
  WORD  Data2;
  WORD  Data3;
  BYTE  Data4[8];
} GUID;

使用此定义,您的代码应该按原样运行。

答案 2 :(得分:2)

GUID<windows.h>的定义与此语法兼容。它也适用于C。

答案 3 :(得分:1)

GUID结构与C#不同。它已定义

typedef struct _GUID 
{  
   DWORD Data1;  
   WORD Data2;  
   WORD Data3;  
   BYTE Data[8];
} GUID;

如果您想将其视为变量,您可以这样做:

GUID guid = {0x4d1e55b2, 0xf16f, 0x11cf, {0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}};

尝试一下,也可以看一下:SO