私は大規模なDelphiコードベースを64ビットに適合させることに取り組んでいます。多くの場合、ポインタがこれに似た32ビット値から/にキャストされている行があります。私は彼らが正しい作る代わりに、nativeint型が-キャストと私はそれらを交換してきたこれらのキャストを見つけることができますDelphi 64-bit:間違ったキャストを見つけましたか?
var
p1,p2 : pointer;
begin
inc(Integer(p1),10);
p2 := Pointer(Integer(p1) + 42);
は64ビットモード。
しかし、私はそれらをすべて見つけたとは思いません。時にはキャストがより微妙なので、文字列 "integer("は十分ではありません)の文字列検索だけです。
ポインタ値が整数の範囲を超えていると "integer私はアイデアを持っています:メモリマネージャに4GB以上のメモリを割り当てさせることができれば(ポインタ値が32ビット以上を使用しているため)、実行時エラーが発生し、誤ったキャストを見つけやすくなります。これは可能ですか他の誰かが他のテクニックをお勧めしますか?
ありがとう、MEM_TOP_DOWNフラグは非常に興味深いです。私が働いているプロジェクトはカスタムデバッグアロケータを持っているので、今度はフラグを使用するように変更しました。非常に遅いですが、私はすでに変換バグを見つけています。 –