6

x64 の TVarData に関する説明は見つかりませんでした。ヘルプにページがありますが、x64 の TVarData と x86 の TVarData は異なるようです。実際、x64 ターゲット用に DEHL をコンパイルしようとしています。しかし、この行に「無効な型キャスト」と表示されます:(ソースは TVarData です)

Big := TBigCardinalVarData(Source).BigCardinalPtr^;

TBigCardinalVarData は次のとおりです。

TBigCardinalVarData = packed record
  VType: TVarType;
  Reserved1, Reserved2, Reserved3: Word;
  BigCardinalPtr: PBigCardinal;
  Reserved4: LongWord;
end;

x86 でコンパイルされますが、x64 でのコンパイルは拒否されます。問題は Word 変数と LongWord 変数にあると思います。しかし、私はまだそれを理解できませんでした。

4

1 に答える 1

12

問題はpacked record宣言です。Packed Record Type は X64 の Record Type になるため、宣言の「packed record」から「packed」を削除し、代わりにALIGNDirective を使用する必要があります。

{$ALIGN 8}
TBigCardinalVarData = record
  VType: TVarType;
  Reserved1, Reserved2, Reserved3: Word;
  BigCardinalPtr: PBigCardinal;
  Reserved4: LongWord;
end;

詳細については、これらのエントリをお読みください

于 2011-10-15T17:51:22.433 に答える