1

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

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

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

4

4 回答 4

3

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

于 2013-02-15T09:10:16.207 回答
3

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

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

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

于 2013-02-15T09:11:08.037 回答
2

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

编辑微软定义 GUID如下:

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

使用此定义,您的代码应该可以正常工作。

于 2013-02-15T09:07:49.547 回答
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}};

试试看,也看看这里:所以

于 2013-02-15T09:10:36.840 回答