来自Win32 UuidToString()调用的意外字符串

时间:2011-01-21 17:33:42

标签: winapi guid win32com win32ole

我有一个通过调用CoCreateGuid()生成GUID的简单类。然后我将结果传递给UuidToString()。

大部分时间我都会收到以下格式的字符串:

e0e3e4b5-6f13-4043-b6c6-488c8b85cbd1

然而,在一些机器上,结果看起来像这样:

0-40:61:86:C2:4E:4F

有人可以解释这种意想不到的行为吗?第二种形式甚至是GUID吗?

更新:我找到了错误的来源,结果发现UuidToString()没有返回我认为的字符串。

感谢所有答案。

3 个答案:

答案 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()。有两种方法来完成同样的事情总是一个明显的标志,后来更好。