新しいVCLアプリケーションでは、コンパイルとビルドの操作で同じバイナリファイルとマップファイルが生成されます([プロジェクトにバージョン情報を含める]オプションがオフになっている場合でも、.exeファイルの末尾にわずかな違いがあります-すでに説明しました)。マップファイルは同じバイト単位です。しかし、サードパーティのコンポーネントを追加すると、ビルドとコンパイルによって生成されるバイナリファイルとmap(!)ファイルは大幅に異なります。
Delphiの2つのバージョンでテスト済み:
-バージョン7.0(ビルド8.1)
-CodeGear™RAD Studio 2007バージョン11.0.2902.10471(+ 2007年12月更新)
再現する手順:
- 新しいVCLアプリケーションを作成します。おそらく、ネイティブのDelphiコンポーネントを追加します(Standart、Additional、Win32、およびSystemタブのすべてのコンポーネントを試します)。
- プロジェクトオプションの[リンカー]タブで[詳細マップファイル]をオンにします。
- プロジェクトをビルドします。
- 出力.exeおよび.mapファイルの名前を変更します(例:project1.exeをproject1b.exeに、project1.mapをproject1b.mapに)。
- プロジェクトをコンパイルします。
- 出力.exeおよび.mapファイルの名前を変更します(例:project1.exeをproject1c.exeに、project1.mapをproject1c.mapに)。
- 手順4と6のファイルを比較します(私はWinMerge 2.12.4.0を使用しています)。
わずかに異なる.exeファイルと完全に同一の.mapファイルがあります。次に、すべての手順をもう一度繰り返しますが、プロジェクトのサードパーティコンポーネント(ODAC、DOA、DevExpress、および自作を試します)で使用すると、より多くの異なる.exeファイルと異なる.mapファイルが得られます。
なんで?助言がありますか?
更新
私がこれを見つけた方法とそれが私に興味を持っている理由に関するいくつかの情報:
プロジェクトはMSBuildを使用した単純なスクリプトからビルドされます。プロジェクトにITE(リソース付きのdll)を介して翻訳が追加されたとき、プロジェクトがビルド(スクリプトまたはIDEから)の場合-翻訳されたバージョンが正しく機能しない-ボタンのテキスト、ラベルなどが間違った場所から(文字通り別の場所から)取得されたことがわかりましたボタン、ラベル)。プロジェクトをIDEからコンパイルすると、すべて問題ありません。そこで、ビルドとコンパイルの出力の比較を開始します...