2015-07-30 3 views

ответ

2

Вы можете вызвать функцию Windows API CLSIDFromString и проверить (при ее сбое), если возвращаемое значение не было CO_E_CLASSSTRING (что означает недопустимую строку ввода). Вызов встроенной функции StringToGUID не является надежным, так как он вызывает исключение, из которого вы не можете получить причину сбоя.

Следующая функция возвращает значение True, если входная строка является допустимым идентификатором GUID, в противном случае - False. В случае другого (неожиданного) сбоя возникает исключение:

[Code] 
const 
    S_OK = $00000000; 
    CO_E_CLASSSTRING = $800401F3; 

type 
    LPCLSID = TGUID; 
    LPCOLESTR = WideString; 

function CLSIDFromString(lpsz: LPCOLESTR; pclsid: LPCLSID): HRESULT; 
    external '[email protected] stdcall'; 

function IsValidGuid(const Value: string): Boolean; 
var 
    GUID: LPCLSID; 
    RetVal: HRESULT; 
begin 
    RetVal := CLSIDFromString(LPCOLESTR(Value), GUID); 
    Result := RetVal = S_OK; 
    if not Result and (RetVal <> CO_E_CLASSSTRING) then 
    OleCheck(RetVal); 
end; 
+0

спасибо TLama, это качество, которое я знаю от вас. Это был именно тот фрагмент, который я искал. –

+0

Добро пожаловать! – TLama

Смежные вопросы