如何检查字符串是否是有效的GUID?

时间:2015-07-30 06:57:21

标签: inno-setup pascalscript

我需要验证用户输入并检查输入的字符串是否是有效的GUID。我怎样才能做到这一点?是否有某种IsValidGuid验证功能?

1 个答案:

答案 0 :(得分:2)

您可以调用Windows API函数CLSIDFromString并检查(失败时)返回值是否为CO_E_CLASSSTRING(代表无效的输入字符串)。调用内置的StringToGUID函数是不可靠的,因为它会引发异常,导致您无法获得失败的原因。

如果输入字符串是有效的GUID,则以下函数返回True,否则返回False。在其他(意外)失败的情况下,它会引发异常:

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

type
  LPCLSID = TGUID;
  LPCOLESTR = WideString;

function CLSIDFromString(lpsz: LPCOLESTR; pclsid: LPCLSID): HRESULT;
  external 'CLSIDFromString@ole32.dll 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;