Object 如何向LongInt打字?

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的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);
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,效果很好。非常感谢。