0

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

大多数时候我得到一个格式为:

e0e3e4b5-6f13-4043-b6c6-488c8b85cbd1

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

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

任何人都可以解释这种意外行为吗?第二种形式甚至是 GUID 吗?

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

感谢所有的答案。

4

3 回答 3

1

严格来说,两者都不是 /is/ GUID,因为 GUID 是 128 位数字,而不是字符串。我从未见过第二种形式,但我可以想象一个将其定义为有效的实现。通常 UuidCreate、UuidFromString 等是在 rpcrt4.dll 中实现的,但我想你可以有一个替代实现。将字符串传递给 UuidFromString 并检查该函数的返回值。确保它是在与 UuidCreate 和 UuidToString 相同的 DLL 中实现的,这首先给了你这个可疑的 GUID。

于 2011-01-21T18:26:30.267 回答
1

警告:这只是一个猜测!

你在那里的东西看起来很像一个 MAC 地址。

CoCreateGuid基本上使用UuidCreate. 那个人可以使用计算机网络适配器来创建本地唯一的 UUID。我的猜测是,在这些机器上,它们的某些网络配置会触发“错误”或其他东西,因此会返回中间字符串。

您可以尝试UuidCreate直接使用并使用RPC_S_UUID_NO_ADDRESS标志

http://msdn.microsoft.com/en-us/library/aa379205(v=vs.85).aspx

于 2011-01-21T18:06:29.327 回答
1

奇怪。虽然 RPC 是一个奇怪的 API,但它非常古老,并且保留了大量的怪癖。我建议您改用 StringFromGUID2() 。有两种方法来完成同一件事总是一个明显的信号,越晚越好。

于 2011-01-21T19:40:15.353 回答