我正在将 Delphi 项目移植到 64 位,并且在代码中使用了
编译器会报以下错误:
IN
运算符时遇到了问题。编译器会报以下错误:
我编写了一个示例应用程序来复制此问题。E2010 不兼容的类型:'Integer' 和 'Int64'
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
Var
I : Integer;
L : Array of string;
begin
try
if I in [0, High(L)] then
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
readln;
end.
这段代码在32位系统中可以正常工作,但为什么在Delphi XE2 64位系统中无法编译?我该如何解决这个问题?
*更新 *
看起来我的帖子引起了很多困惑(对此感到抱歉),我要说明的是我正在移植的原始代码更加复杂,我只是写了这段代码作为示例来说明问题。原始代码使用in运算符来检查一个小于255的值是否属于一组所有小于或等于255的值,如下所示:
i in [0,1,3,50,60,70,80,127,High(LArray)]
cardinal(I)<=cardinal(high(L))
,这将只需要一个操作码进行比较,并解决类型转换问题。 - Arnaud BouchezHigh(LArray) <= 255
。 - Kromsterhigh(L)>=low(Byte)
和high(L)<=high(Byte)
,那么您就没问题了。 - David Heffernan