2011-10-15 5 views
6

x64のTVarDataについて説明が見つかりませんでした。ヘルプにはページがありますが、x64のTVarDataとx86のTVarDataは異なっているようです。実際には私はx64ターゲットのDEHLをコンパイルしようとしています。しかし、それは、このライン上で "無効な型キャスト" と言う:(出典のTVarDataある)TVarData x86とx64の相違点Delphi

Big := TBigCardinalVarData(Source).BigCardinalPtr^; 

そしてTBigCardinalVarDataはここにある:

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

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

答えて

12

問題がpacked record宣言され、ランチレコードタイプは、X64にレコードの種類なるので、あなたは宣言の中で「詰めたレコード」から「パック」を削除し、代わりにALIGN指令を使用する必要があります。詳細は

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

これらのエントリ

+0

完璧な、感謝をお読みください。 :) – oruchreis

+0

私はそのように変更しました '{$ IFDEF CPUX64} {$ ALIGN 8} {$ ENDIF} TBigIntegerVarData = {$ IFDEF CPUX86}パック{$ ENDIF}レコード' – oruchreis