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