2011-01-21 20 views
0

我有一個通過調用CoCreateGuid()生成GUID的簡單類。然後我將結果傳遞給UuidToString()。來自Win32 UuidToString()的意外字符串調用

大多數時候,我得到的格式的字符串:

e0e3e4b5-6f13-4043-b6c6-488c8b85cbd1

然而,在幾臺機器,結果看起來是這樣的:

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

任何人都可以解釋這種意外的行爲嗎?第二種形式甚至是GUID?

更新:我找到了錯誤的來源,事實證明,UuidToString()沒有返回我認爲是的字符串。

感謝您的所有答案。

+0

您是否檢查`CoCreateGuid`和`UuidToString`中的錯誤代碼?你是否嘗試過`StringFromCLSID`而不是`UuidToString`? – 2011-01-21 18:50:45

回答

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

嚴格地說既不形式/是/一個GUID,因爲GUID是一個128位的數字,而不是字符串。我從來沒有見過第二種形式,但我可以想象一個實現將它定義爲有效的實現。通常UuidCreate,UuidFromString等在rpcrt4.dll中實現,但我想你可以有一個替代實現。將字符串傳遞給UuidFromString並檢查該函數的返回值。確保它在與UuidCreate和UuidToString相同的DLL中實現,首先給你這個可疑的GUID。

1

奇思妙想。雖然RPC是一個古怪的API,但它非常古老,而且怪癖保存得很好。我建議你使用StringFromGUID2()來代替。有兩種方式來完成同樣的事情總是一個明顯的跡象,以後會更好。