Object 如何向LongInt打字?
好的,我有一个名为CaLlist的TStringList变量,并在代码中使用它,如下所示Object 如何向LongInt打字?,object,casting,overflow,long-integer,lazarus,Object,Casting,Overflow,Long Integer,Lazarus,好的,我有一个名为CaLlist的TStringList变量,并在代码中使用它,如下所示 CalList.strings[i] := "Something"; CalList.Objects[i] := TObject(22.3); rawval := PtrInt(CalList.Objects[i]); <<------- Error raised here. CalList.strings[i]:=“某物”; CalList.Objects[i]:=TObject(22.3
CalList.strings[i] := "Something";
CalList.Objects[i] := TObject(22.3);
rawval := PtrInt(CalList.Objects[i]); <<------- Error raised here.
CalList.strings[i]:=“某物”;
CalList.Objects[i]:=TObject(22.3);
rawval:=PtrInt(CalList.Objects[i]) 您必须将
.Object[i]
强制转换为双倍(双倍大小=8字节=x86_64上的寄存器大小)或单倍(单倍大小=4字节=x86上的寄存器大小)
例如:
program Project1;
uses classes;
{$IFDEF CPU32}
type PtrFloat = Single;
{$ELSE}
type PtrFloat = Double;
{$ENDIF}
var
CalList: TStringList;
rawval: PtrFloat;
begin
CalList := TStringList.Create;
CalList.Add('');
rawval := 22.3;
CalList.strings[0] := 'Something';
CalList.Objects[0] := TObject(rawval);
rawval := PtrFloat(CalList.Objects[0]);
writeln(rawval);
readln;
end.
22.3
不是整数值。@Abelisto噢,它只接受整数值而不是实数或浮点值。@Abelisto我试着像3一样输入整数值,但它不会接受。它实际上需要真正的值,否则就无法编译。是你的吗?看看-也许你会发现比TStringList更适合你的任务。@Abelisto yep这是我在Lazarus论坛上的主题。:)我看到了你的用户名,意识到是你。:)好的……我们已经超越了使用32位机器。所以,我绕过了必须定义类型的问题,使用了Double straight,效果很好。非常感谢。