gpt4 book ai didi

Delphi RIO - 当 Ansi 字符串是 const 数组的一部分时,Ansi 到字符串的转换不起作用

转载 作者:行者123 更新时间:2023-12-02 16:30:58 27 4
gpt4 key购买 nike

我正在使用 Delphi RIO 10.3.3。

当我将 Ansi 字符串作为 const 数组的元素之一传递时,string() 转换对其不起作用。为了让它工作,我必须先将 VAnsiString 转换为 AnsiString(),然后再应用 String() 转换。

我在网上看到的大多数类似示例都使用直接 String() 转换。

这是 RIO 中的错误还是我遗漏了什么?

function TForm1.VarRecToStr(AVarRec: TVarRec): string;
const
Bool : array[Boolean] of string = ('False', 'True');
begin
case AVarRec.VType of
vtInteger: Result := IntToStr(AVarRec.VInteger);
vtBoolean: Result := Bool[AVarRec.VBoolean];
vtChar: Result := AVarRec.VChar;
vtExtended: Result := FloatToStr(AVarRec.VExtended^);
vtString: Result := AVarRec.VString^;
vtPChar: Result := AVarRec.VPChar;
vtObject: Result := AVarRec.VObject.ClassName;
vtClass: Result := AVarRec.VClass.ClassName;
//vtAnsiString: Result := string(AnsiString(AVarRec.VAnsiString));
vtAnsiString: Result := string(AVarRec.VAnsiString);
vtCurrency: Result := CurrToStr(AVarRec.VCurrency^);
vtVariant: Result := string(AVarRec.VVariant^);
vtWideString: Result := string(WideString(AVarRec.VWideString));
vtUnicodeString:
Result := string(AVarRec.VUnicodeString);
else
result := '';
end;
end;


function TForm1.VarArrayToStr(AVarArray: array of const): string;
var
i : integer;
begin
result := '';
for i := 0 to High(AVarArray) do
result := result + VarRecToStr( AVarArray[i] );
end;


procedure TForm1.Button1Click(Sender: TObject);
var
w: WideString;
s: shortstring;
an: Ansistring;
begin
//
w := 'Wide';
s := 'Short';
an := 'Ansi';
ShowMessage(VarArrayToStr([w,s,an, 10]));
end;

输出:

enter image description here

代码归功于:How do I build an array of const?

最佳答案

UnicodeStringWideString 一样,AnsiString 作为 untyped< 存储在 TVarRec 中/em> 指向其数据负载的指针。您必须将该指针转换为 AnsiString(或至少转换为 PAnsiChar),以便 RTL 正确访问 AnsiString 的数据(如果需要,包括它的 StrRec header )。您正在尝试将未类型化的 Pointer 按原样 直接类型转换为 UnicodeString,这将不起作用。编译器会接受它,但它会假定指针指向 UnicodeString 的有效负载,而不是指向 AnsiString 的有效负载。因此,您需要将指针类型转换为 PAnsiCharAnsiString 以便 RTL 知道在分配给 期间将数据从 ANSI 转换为 Unicode UnicodeString.

关于Delphi RIO - 当 Ansi 字符串是 const 数组的一部分时,Ansi 到字符串的转换不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63505674/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com