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 的用法:的主要内容,如果未能解决你的问题,请参考以下文章