Я просто хотел бы еще раз проверить, какой из них правильно использовать для внутренних сгенерированных GUID, которые не имеют отношения к COM-классам.
Я подозреваю, что это UuidFromString, но я продолжаю видеть код, который использует CLSIDFromString. У меня есть смутное воспоминание, что CLSIDFromString может перечислять COM-классы, перечисленные в реестре, но я не уверен, что это правильно.
я хотел бы использовать UuidFromString
— документация для CLSIDFromString
прямо заявляет, что его целью является преобразование строк, сгенерированных StringFromCLSID
обратно в CLSID
,
Даже если поведение этих двух функций идентично (и я подозреваю, что это может быть не так — рассмотрим, например, что CLSIDFromString
может вернуться REGDB_E_CLASSNOTREG
указав, что класс не зарегистрирован или REGDB_E_READREGDB
что указывает на ошибку ввода / вывода в реестре) рекомендуется различать CLSID
и ваш собственный внутренний GUID
объекты.
Рэймонд Чен отвечает на это:
UuidFromString
:
Давайте начнем с UuidFromString. Это берет строку в базовой форме
без фигурных скобок. В особом случае, если вы передаете NULL вместо
действительный указатель на строку, функция все еще успешно и устанавливает результат
GUID_NULL.
CLSIDFromString
:
Чуть более сложным является CLSIDFromString. В дополнение к
принимая строку в скобках (которая рассматривается как GUID), она
также принимает ProgId. В случае ProgId возвращает CLSID
связанный с этим ProgId.