无效的类型转换:在64位平台上将记录转换为tobject

tao*_*oxl 5 delphi 64-bit casting record tobject

它适用于32位平台.但这里不是64位的例子

  TVerbInfo = packed record
    Verb: Smallint;
    Flags: Word;
  end;

var
  VerbInfo: TVerbInfo;
  strList : TStringList;
  verb : Smallint;
  flags : Word;
begin
  strList := TStringList.create();
  .....
  verbInfo.verb := verb;
  verbInfo.flags := flags;
  strList.addObject('verb1',TObject(VerbInfo));  //invalid typecast happened here
end;
Run Code Online (Sandbox Code Playgroud)

谁能帮我?非常感谢你

Uli*_*rdt 4

你可以尝试这样的事情:

function MakeVerbInfoObject(const AVerbInfo: TVerbInfo): TObject;
begin
  Result := nil;
  Move(AVerbInfo, Result, SizeOf(AVerbInfo));
end;

strList.addObject('verb1', MakeVerbInfoObject(VerbInfo));
Run Code Online (Sandbox Code Playgroud)

要检索值,您可以使用相应的函数,例如

function GetVerbInfoFromObject(AObject: TObject): TVerbInfo;
begin
  Move(AObject, Result, SizeOf(Result));
end;

VerbInfo := GetVerbInfoFromObject(strList.Objects[idx]);
Run Code Online (Sandbox Code Playgroud)