Ian*_*oyd 4 delphi delphi-5 widestring
我有以下代码snippit将无法编译:
procedure Frob(const Grob: WideString);
var
s: WideString;
begin
s :=
Grob[7]+Grob[8]+Grob[5]+Grob[6]+Grob[3]+Grob[4]+Grob[1]+Grob[2];
...
end;
Run Code Online (Sandbox Code Playgroud)
德尔福5抱怨Incompatible types
.
我尝试将其简化为:
s := Grob[7];
Run Code Online (Sandbox Code Playgroud)
哪个有效,并且:
s := Grob[7]+Grob[8];
Run Code Online (Sandbox Code Playgroud)
没有.
我只能假设WideString[index]
没有返回WideChar
.
我试图强迫事情WideChars
:
s := WideChar(Grob[7])+WideChar(Grob[8]);
Run Code Online (Sandbox Code Playgroud)
但那也失败了:
不兼容的类型
5
:Delphi 5Arn*_*hez 10
在您的情况下,更简单,更快速的是以下代码:
procedure Frob(const Grob: WideString);
var
s: WideString;
begin
SetLength(s,8);
s[1] := Grob[7];
s[2] := Grob[8];
s[3] := Grob[5];
s[4] := Grob[6];
s[5] := Grob[3];
s[6] := Grob[4];
s[7] := Grob[1];
s[8] := Grob[2];
...
end;
Run Code Online (Sandbox Code Playgroud)
使用WideString(Grob[7])+WideString(Grob[8])
表达式将起作用(它绕过Delphi 5的错误,你不能通过WideString
它连接起来WideChars
),但速度要慢得多.
创建a WideString
非常慢:它不使用Delphi内存分配器,而是使用Windows提供的BSTR内存分配器(用于OLE),这是非常慢的.
Grob[7]
是一个WideChar
; 那不是问题.
问题似乎是+
运营商无法对广泛的角色采取行动.但是它可以作用于宽字符串,并且任何宽字符都可以转换为宽字符串:
S := WideString(Grob[7]) + WideString(Grob[8]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1015 次 |
最近记录: |