我正在寻找在 C++ 中比较两个 GUID 是否相等的最简单方法。当然,有一个预定义的功能。
该解决方案需要与Visual C++ 2010一起使用。
我说的是 Guiddef.h 中定义的 GUID:
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
我正在寻找在 C++ 中比较两个 GUID 是否相等的最简单方法。当然,有一个预定义的功能。
该解决方案需要与Visual C++ 2010一起使用。
我说的是 Guiddef.h 中定义的 GUID:
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
也许您想要IsEqualGUID(它在幕后使用 memcmp)或只是使用operator==
(它为您调用 IsEqualGUID)。
== 运算符是否没有重载来为您执行此操作?或使用IsEqualGUID。
Wine 实现在这里:https ://source.winehq.org/source/dlls/ole32/compobj.c
快速简单明了:
/***********************************************************************
* IsEqualGUID [OLE32.@]
*
* Compares two Unique Identifiers.
*
* PARAMS
* rguid1 [I] The first GUID to compare.
* rguid2 [I] The other GUID to compare.
*
* RETURNS
* TRUE if equal
*/
#undef IsEqualGUID
BOOL WINAPI IsEqualGUID(
REFGUID rguid1, REFGUID rguid2) {
return !memcmp(rguid1, rguid2, sizeof(GUID));
}
这将与任何 Visual Studio 版本一起编译。那也是 C,所以 C++ 爱好者可能会把它包起来extern "C" { }