如何在Delphi中以C++类似的十六进制值方式创建CLSID(TGUID)?
Delphi中创建TGUID(CLSID)的正确十六进制赋值方式
错误原因
你写的代码报错是因为Delphi中TGUID构造函数的第四个参数要求是字节数组,而($12, $34, $56, $78, $90, $AB, $CD, $EF)这种写法不符合Delphi的数组字面量语法规则,编译器无法识别。
几种正确的实现方式
方式一:使用TGUID构造函数(数组字面量)
直接将第四个参数改为Delphi支持的数组字面量格式(用方括号包裹):
var clsid: TGUID; begin clsid := TGUID($12345678, $1234, $1234, [$12, $34, $56, $78, $90, $AB, $CD, $EF]); end;
方式二:直接赋值TGUID的字段
TGUID的结构包含D1(DWORD)、D2(Word)、D3(Word)和D4(长度为8的字节数组),可以直接给每个字段赋值:
var clsid: TGUID; begin clsid.D1 := $12345678; clsid.D2 := $1234; clsid.D3 := $1234; clsid.D4[0] := $12; clsid.D4[1] := $34; clsid.D4[2] := $56; clsid.D4[3] := $78; clsid.D4[4] := $90; clsid.D4[5] := $AB; clsid.D4[6] := $CD; clsid.D4[7] := $EF; end;
方式三:通过字符串转换(直观易读)
如果觉得十六进制拆分麻烦,可以直接使用标准GUID字符串格式,通过StringToGUID转换:
var clsid: TGUID; begin clsid := StringToGUID('{12345678-1234-1234-1234-567890ABCDEF}'); end;
以上三种方式生成的TGUID都可以直接用于CoCreateInstance调用,完全符合CLSID的要求。
内容的提问来源于stack exchange,提问作者FLASHCODER
相关产品推荐
相关产品推荐

