4

私はBPLプロジェクト(いくつかの基本的なものを含む)と、他のプロジェクトの出力(BPLおよびDCP)の場所を検索パスに持つEXEプロジェクトを持っています。EXE プロジェクトを「Build With Runtime Packages」でビルドすると正常にビルドされます。ただし、EXE と BPL をデプロイする必要があります。ここまでは順調ですね。

EXE だけを展開したいので (サイズが大きくなっても)、"Build With Runtime Packages" のチェックを外すだけでいいと思いますが、そうではありません。ビルドされず、不足しているクラスについて不平を言い始めます。EXE プロジェクトをコンパイルできる唯一の方法は、実際の BPL プロジェクトの DCU へのパスを EXE プロジェクトの検索パスに追加することです。それはできますが、なぜ DCU を指定しなければならないのですか? Delphi は BPL からそれらを取得することはできませんか? これは好みの問題ではありません。この方法で DCU にリンクすると、フォームに属する DCU に関しては、フォーム DFM を要求され、ソース フォルダーも EXE に含める必要があります。プロジェクトの検索パス、そして今ではコンパイルされているように見えますが、これは法外です。できます'

私は自分自身を明確にしたことを願っています。

タイトルで求められていることを達成する方法についての助けをいただければ幸いです。

ありがとうございました。

4

3 に答える 3

5

外部ライブラリをリンクするには、 staticdynamicの 2 つの方法があります。

ランタイム パッケージを使用している場合、これは動的リンクです。実際の実装はBPLファイル (実際には単純な dll) にあり、メソッドとクラスはプロセスの開始時にそこからインポートされます。これによりexeサイズが縮小されますが、BPLファイルを送信する必要があります (通常の dll と同じ)。DCUすべてが既にコンパイルおよびリンクされているため、ファイルは必要ありません。リンカはインポート セクションを作成するだけで済みます。

実行時パッケージが無効になっている場合、リンカーはすべてのクラスとメソッドのオブジェクト ファイルを取得し、それを 1 つの実行可能ファイルに結合する必要があります。BPLすでにリンクされた実行可能ファイルであるため、からこのデータを抽出できませんでした。最初にリンクを解除して、異なるモジュールの実装を分離する必要がありますが、これは基本的に不可能です。DCUそのため、プログラムをリンクするためにコンパイルされたオブジェクト コードを含むファイルを提供する必要があります。

したがって、質問のタイトルに対する答えは簡単です-いいえ、それは不可能です。

于 2016-08-30T06:07:53.973 に答える