ライブラリ (DPK/ビジュアル コントロール) を使用するプログラムがあります。ライブラリはデバッグ モードでコンパイルされました。これは、最適化がオフ、範囲チェックがオンなどを意味します。ライブラリは「必要に応じて再構築」に設定されています。私はそれを再配布するつもりはありません (内部使用のみ)。
プログラムを「リリース」モードでコンパイルするとどうなりますか? ライブラリに含まれるコードは自動的に「リリース」モードに再コンパイルされますか? または、最初に DPK をロードしてライブラリを「リリース」モードで再コンパイルする必要がありますか?
更新:
「必要に応じて再ビルドする」に関連する Embarcadero のヘルプには、「必要に応じてパッケージをビルドする」というすべての説明があります。これは、「プログラムがリリース モードでコンパイルされている場合、ライブラリを再コンパイルする必要があるため、代わりに行う」と解釈します。私の解釈も…聖書的ですか?
この実験は、(上記の条件で) ライブラリに含まれるコードが、DPK の設定ではなく DPR の設定に基づいて EXE にコンパイルされることを示しています。
コンパイラは、PAS ファイルを再コンパイルするときに DPK ファイルを気にしません (DPK が IDE に読み込まれていない場合にのみ適用されます)。**
ここに (すべてのシステムで簡単に再現できる) 証明があります: 私のプログラムを Prog.DPR (Prog.pas を含む) とライブラリ Lib.DPK (LibUnit.pas を含む) と呼びましょう。ライブラリには、TMyPanel ビジュアル コントロールが含まれています。DPR はリリース モードです。DPK はデバッグ モードです。
I install the library. I exit the library ('Close all').
I load the DPR in IDE, I also load LibUnit (Attention: I load only the unit, not the DPK)
I put TMyPanel on my program's form.
The LibUnit is automatically added to the USES clause on my program.
I edit LibUnit. I compile. It works. New DCU file is generated for LibUnit.
I go to library's folder and I delete the DPK (and the Dproj) but I keep LibUnit.pas.
I edit LibUnit. I compile. Still works! New DCU file is generated for DCU file is generated for LibUnit.!!!!
問題は、LibUnit のコンパイル方法に関する情報がない (PDK が削除された) 場合、LibUnit はどのようにコンパイルされたのか????? です。明らかに、コンパイラは DPR の設定を使用しました。これは「リリース」モードです。これは、私のライブラリが「リリース」としてプログラムに統合されたことを意味します。.