delphi 如何使用数组的const字符串?

5t7ly7z5  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(83)

我在 Delphi 11.3中遇到了一个array of const问题。
我有一个功能:
MyFunc(test: array of const)
当我用整数调用它时,我可以毫不费力地将它们作为整数返回,例如:
MyFunc([2,4,9,0)
test[0]等按预期工作。
但是,如果我传入一个字符串,例如:
MyFunc(['test',9])
我无法返回字符串。vType返回17,_Reserved1
我已经看了尽可能多的地方,但我卡住了。有人能解释一下吗,告诉我我做错了什么?

46scxncf

46scxncf1#

在现代 Delphi 版本中,默认的字符串类型是UnicodeString
现在,TVarRec文档没有提到任何UnicodeStringvType,但是在System单元中声明了一个vtUnicodeString常量,它的值为17
TVarRec记录中使用相同的常数来检测UnicodeString
因此,TVarRec的文档似乎不是最新的。
你可能想知道为什么vtString在你的例子中没有被返回。好吧,vtString实际上是为ShortString准备的,它将被弃用,或者我应该说已经被弃用了,对于任何移动的平台。
您也可以执行下一个测试场景,您将看到每个字符串类型返回哪些值:

procedure TForm3.Button1Click(Sender: TObject);
var S1: ShortString;
    S2: AnsiString;
    S3: UnicodeString;
    S4: WideString;
    S5: String;
begin
  S1 := 'ShortString';
  S2 := 'AnsiString';
  S3 := 'UnicodeString';
  S4 := 'WideString';
  S5 := 'String';
  MyFunc([S1,S2,S3,S4,S5]);
end;

字符串

相关问题