C++ 中 GUID 的用法:

Posted

技术标签:

【中文标题】C++ 中 GUID 的用法:【英文标题】:Usage of GUID in C++: 【发布时间】:2013-02-15 09:03:31 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

当我这样做时,我会在 Debugger Autos 中的 InterfaceClassGuid 附近看到红色文本,如下所示:4D1E55B2-F15F-11CF-88CB-001111000030(红色)。这正常吗? @AverageAtBest:红色是因为观察值发生了变化(好吧,这就是你声明的意图)。显示的格式更紧凑一些。它省略了 0x 并连接最后 6 个字节。不过还是一样的值。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

编辑: Microsoft defines GUID如下:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于C++ 中 GUID 的用法:的主要内容,如果未能解决你的问题,请参考以下文章

encode 在C++中的用法

c++中vector的用法详解

c++中vector用法

C++中new的用法

C++中string类的详细用法

求c++中vector用法