我只想仔细检查哪一个对于内部生成的与 COM 类无关的 GUID 是正确的。
我怀疑它是 UuidFromString,但我一直看到使用 CLSIDFromString 的代码。我有一个模糊的回忆,CLSIDFromString 可能会枚举注册表中列出的 COM 类,但不确定这是否正确。
Raymond Chen回答:
UuidFromString
:
让我们从 UuidFromString 开始。它采用没有花括号的基本形式的字符串。作为一种特殊情况,如果您传递 NULL 而不是有效的字符串指针,该函数仍然会成功并将结果设置为 GUID_NULL。
CLSIDFromString
:
稍微复杂一点的是 CLSIDFromString。除了接受大括号括起来的字符串(被视为 GUID)外,它还接受 ProgId。在 ProgId 情况下,它返回与该 ProgId 关联的 CLSID。
我会使用UuidFromString
- 文档CLSIDFromString
明确指出其目的是将生成的字符串转换StringFromCLSID
回CLSID
.
即使这两个函数的行为是相同的(我怀疑它可能不是 - 例如,考虑CLSIDFromString
可以返回REGDB_E_CLASSNOTREG
指示类未注册或REGDB_E_READREGDB
指示注册表 I/O 错误),区分aCLSID
和你自己的内部GUID
对象。