C++ 在Windows中,UuidFromString和CLSIDFromString之间有区别吗?
我只想再次检查,对于与COM类无关的内部生成的GUI,使用哪一个是正确的C++ 在Windows中,UuidFromString和CLSIDFromString之间有区别吗?,c++,windows,guid,uuid,clsid,C++,Windows,Guid,Uuid,Clsid,我只想再次检查,对于与COM类无关的内部生成的GUI,使用哪一个是正确的 我怀疑这是UuidFromString,但我一直看到使用CLSIDFromString的代码。我模糊地记得CLSIDFromString可能会枚举注册表中列出的COM类,但是我不确定这是否正确。我会使用UuidFromString-关于CLSIDFromString的文档明确指出,它的目的是将StringFromCLSID生成的字符串转换回CLSID 即使这两个函数的行为是相同的(并且我怀疑它可能不是)——例如,代码> C
我怀疑这是UuidFromString,但我一直看到使用CLSIDFromString的代码。我模糊地记得CLSIDFromString可能会枚举注册表中列出的COM类,但是我不确定这是否正确。我会使用
UuidFromString
-关于CLSIDFromString
的文档明确指出,它的目的是将StringFromCLSID
生成的字符串转换回CLSID
即使这两个函数的行为是相同的(并且我怀疑它可能不是)——例如,<>代码> CLSIDROFSCONSHIG/<代码>可以返回<代码> ReqBujeE.CaseNoTung < /代码>,指示类未注册或<代码> ReqBujeE.Read ReDbb>代码>,表示注册表I/O错误)区分
CLSID
和您自己的内部GUID
对象是一种很好的做法。我会使用UuidFromString
,CLSIDFromString
的文档明确指出,它的目的是将StringFromCLSID
生成的字符串转换回CLSID
即使这两个函数的行为是相同的(并且我怀疑它可能不是)——例如,<>代码> CLSIDROFSCONSHIG/<代码>可以返回<代码> ReqBujeE.CaseNoTung < /代码>,指示类未注册或<代码> ReqBujeE.Read ReDbb>代码>,表示注册表I/O错误)区分
CLSID
和您自己的内部GUID
对象是一种很好的做法。Raymond Chen:
Uuid-From-String
:
让我们从Uuid-From-String开始。它采用基本形式的字符串
没有花括号。作为特例,如果传递NULL而不是
如果字符串指针有效,函数仍会成功并设置结果
要设置GUID\u空值
CLSID-From-String
:
稍微复杂一点的是CLSID-From-String。除了
接受大括号括起的字符串(被视为GUID),则
也接受ProgId。在ProgId情况下,它返回CLSID
与该ProgId关联
陈雷蒙:
Uuid-From-String
:
让我们从Uuid-From-String开始。它采用基本形式的字符串
没有花括号。作为特例,如果传递NULL而不是
如果字符串指针有效,函数仍会成功并设置结果
要设置GUID\u空值
CLSID-From-String
:
稍微复杂一点的是CLSID-From-String。除了
接受大括号括起的字符串(被视为GUID),则
也接受ProgId。在ProgId情况下,它返回CLSID
与该ProgId关联
谢谢@Nik。在办公室进一步讨论之后,我们现在怀疑CLSIDFromString需要返回REGDB_E_CLASSNOTREG的原因是它可能接受OLE类名以及字符串参数中的GUID。无论如何,使用UuidFromString几乎肯定更安全。谢谢@Nik。在办公室进一步讨论之后,我们现在怀疑CLSIDFromString需要返回REGDB_E_CLASSNOTREG的原因是它可能接受OLE类名以及字符串参数中的GUID。无论如何,使用UuidFromString几乎肯定更安全。