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

How to check if the string is a valid GUID?

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

您可以调用 Windows API 函数 CLSIDFromString 并检查(在其失败时)返回值是否不是 CO_E_CLASSSTRING(表示无效输入细绳)。调用内置 StringToGUID 函数并不可靠,因为它会引发异常,您无法从中获取失败原因。

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

[Code]
const
  S_OK = [=10=]000000;
  CO_E_CLASSSTRING = 0401F3;

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;