5

我正在寻找在 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;
4

3 回答 3

12

也许您想要IsEqualGUID(它在幕后使用 memcmp)或只是使用operator==(它为您调用 IsEqualGUID)。

于 2012-08-06T20:15:11.133 回答
2

== 运算符是否没有重载来为您执行此操作?或使用IsEqualGUID

于 2012-08-06T20:14:17.217 回答
-2

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" { }

于 2020-09-25T13:29:38.097 回答