从String转换为GUID失败

时间:2013-02-01 11:10:06

标签: c++ winapi guid

我正在尝试使用函数UuidFromString将字符串转换为GUID。

我的问题:生成的GUID不正确。当我使用IsEqualGUID比较GUID时,当它应该说2 GUID是相同的时,函数总是返回零。

看一下显示错误的示例:

// NOTE: MONITOR_CLASS and MONITOR_CLASS_STR are EXACTLY the same GUID
//       except that one is in string version. When I convert the string
//       to a GUID then compare both of them, the comparison says they
//       AREN'T the same?? Whats going wrong? 
GUID id;
GUID MONITOR_CLASS       = { 0x4d36e96e, 0xe325, 0x11c3, { 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 } };
LPTSTR MONITOR_CLASS_STR = L"4d36e96e-e325-11ce-bfc1-08002be10318";
UuidFromString((RPC_WSTR)MONITOR_CLASS_STR, &id);

_tprintf(_T("String: {%s}\nuID:    {%x-%x-%x-%2x%2x-%2x%2x%2x%2x%2x%2x}\n"), MONITOR_CLASS_STR, id.Data1, id.Data2, id.Data3, id.Data4[0],
     id.Data4[1], id.Data4[2], id.Data4[3], id.Data4[4], id.Data4[5], id.Data4[6], id.Data4[7]);


_tprintf(_T("IsEqualGUID: %d\n"), IsEqualGUID(id, MONITOR_CLASS));

输出结果为:

  

字符串:{4d36e96e-e325-11ce-bfc1-08002be10318}
  uID:{4d36e96e-e325-11ce-bfc1- 8 02be1 318}
  IsEqualGUID:0

1 个答案:

答案 0 :(得分:3)

他们 不同:GUID MONITOR_CLASS有0x11c 3 ,而你的_STR版本有“11c e ”。