我在下面的评论中遇到过几次"不兼容类型"错误,并且从未对Delphi 2007中没有直接支持的原因感到满意:
program Project1; {$APPTYPE CONSOLE}
type TCharArray = array of Char;
procedure DoArray(Chars: array of Char);
begin
end;
function ReturnTCharArray: TCharArray;
var CharArray: TCharArray;
begin
Result := CharArray;
end;
begin
DoArray(ReturnTCharArray); // [DCC Error] Project1.dpr(18): E2010 Incompatible types: 'Array' and 'TCharArray'
end.
Run Code Online (Sandbox Code Playgroud)
是不是可以将数组类型"别名"为另一个彼此兼容的数组类型?假设我无法更改DoArray的声明(它是第三方库的一部分),我如何编写一个返回与DoArray的param兼容的char数组的函数?直截了当的"函数ReturnAChar:Char数组;" 导致"标识符预期但发现'ARRAY'"错误.我甚至尝试将返回数组的函数更改为带有var"array of char"pram的过程,但是这也不允许在过程中设置"Char数组"参数的长度("Constant对象不能传递作为var参数").
我正在将软件从Delphi 5迁移到Delphi XE.我已经纠正了很多差异,现在我可以编译我的代码了.
发生的问题是有时(在代码的某些地方),我收到错误"范围检查错误".
例如,在此代码中:
function CopyChar(Ori : string; var Des : Array of char) : Boolean;
var Msg : string;
Counter : integer;
SizeDes : integer;
begin
SizeDes:= SizeOf(Des);
for Counter:= 1 to SizeDes do begin
Des[Counter-1]:= ' ';
end;
Ori:= Trim(Ori);
Msg:= '';
SizeDes:= Min(Length(Ori),SizeDes);
for Counter:= 1 to SizeDes do begin
Des[Counter-1]:= char(Ori[Counter]);
end;
CopyChar:= True;
end;
Run Code Online (Sandbox Code Playgroud)
经过Des [Counter-1]行时,我在运行时得到错误:=''; 错误发生在第一次通过循环时,但在很多次之后.
我试图禁用Rance Checking($ R),但它没有解决我的问题.我也尝试将"Counter"的类型更改为Cardinal和LongWord,但没有成功
我会很高兴任何有用的想法!
谢谢.