我只想仔細檢查哪一個是正確的用於內部生成的GUID與COM類沒有關係。在Windows中,UuidFromString和CLSIDFromString是否有區別?
我懷疑是它的UuidFromString,但我一直看到使用CLSIDFromString代碼。我有一個模糊的回憶,CLSIDFromString可能枚舉註冊表中列出的COM類,但不知道這是否正確。
我只想仔細檢查哪一個是正確的用於內部生成的GUID與COM類沒有關係。在Windows中,UuidFromString和CLSIDFromString是否有區別?
我懷疑是它的UuidFromString,但我一直看到使用CLSIDFromString代碼。我有一個模糊的回憶,CLSIDFromString可能枚舉註冊表中列出的COM類,但不知道這是否正確。
我會使用UuidFromString
- CLSIDFromString
的文檔明確指出,它的目的是將由StringFromCLSID
生成的字符串轉換回CLSID
。
即使兩個函數的行爲是相同的(並且我懷疑它可能不被 - 考慮,例如,CLSIDFromString
可以返回REGDB_E_CLASSNOTREG
指示類沒有被登記或REGDB_E_READREGDB
,其指示一個註冊表I/O錯誤)區分CLSID
和您自己的內部對象是很好的做法。
雷蒙德陳answers this:
UuidFromString
:
讓我們先從UuidFromString。它需要一個基本形式的字符串 沒有大括號。作爲一種特殊情況,如果您通過NULL而不是 有效的字符串指針,該函數仍會成功,並將結果 設置爲GUID_NULL。
CLSIDFromString
:
稍微複雜是CLSIDFromString。除 接受括號封閉的字符串(將其視爲GUID)之外, 還接受ProgId。在ProgId情況下,它返回與該ProgId關聯的CLSID 。
謝謝@Nik。在辦公室進一步討論之後,我們現在懷疑CLSIDFromString需要返回REGDB_E_CLASSNOTREG的原因是它可能接受OLE類名以及字符串參數中的GUID。 無論如何,使用UuidFromString幾乎肯定更安全。 – 2013-02-11 14:43:37