我只想仔细检查哪一个对于内部生成的与 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对象。