我有一个通过调用CoCreateGuid()生成GUID的简单类。然后我将结果传递给UuidToString()。
大部分时间我都会收到以下格式的字符串:
e0e3e4b5-6f13-4043-b6c6-488c8b85cbd1
然而,在一些机器上,结果看起来像这样:
0-40:61:86:C2:4E:4F
有人可以解释这种意想不到的行为吗?第二种形式甚至是GUID吗?
更新:我找到了错误的来源,结果发现UuidToString()没有返回我认为的字符串。
感谢所有答案。
答案 0 :(得分:1)
警告:这只是猜测!
你在那里看起来非常像MAC地址。
CoCreateGuid
基本上使用UuidCreate
。
那个可以使用计算机网络适配器来创建本地唯一的UUID。
我的猜测是,在这些机器上,他们的网络配置会触发“bug”或其他东西,因此返回中间字符串。
您可以尝试直接使用UuidCreate
并使用RPC_S_UUID_NO_ADDRESS
标记
http://msdn.microsoft.com/en-us/library/aa379205(v=vs.85).aspx
答案 1 :(得分:1)
严格来说,既没有形式/是/ GUID,因为GUID是128位数字,而不是字符串。我从来没有见过第二种形式,但我可以想象一个实现,它将被定义为有效。通常UuidCreate,UuidFromString等在rpcrt4.dll中实现,但我想你可以有一个替代实现。将字符串传递给UuidFromString并检查该函数的返回值。确保它在与UuidCreate和UuidToString相同的DLL中实现,它首先为您提供了这个可疑的GUID。
答案 2 :(得分:1)
怪异。 RPC虽然是一个古怪的API,它已经很老了,而且它的怪癖很大。我建议你改用StringFromGUID2()。有两种方法来完成同样的事情总是一个明显的标志,后来更好。