1

プラグインを使って GUI アプリケーションを開発したいと考えています。プラグインには、Plugin-Core ライブラリのベース フォームから継承された VCL フォームが含まれています。メイン アプリケーションは、動的にロードするプラグインを選択してから、表示する Form サブクラスを選択できます。

ユーザー側では、メインの.EXE、Plugin-Core ライブラリ、およびさまざまなモデル用の多くのプラグイン ライブラリをデプロイしたいと考えています。メインの.EXEと Plugin-Core ライブラリを変更せずに、新しいデバイス用の新しいフォームを表示するために、新しいプラグイン ライブラリをユーザーにリリースするか、既存のプラグイン ライブラリを変更することができました。

私が開発した最初のバージョンは DLL アプローチを使用しています。つまり、Plugin-Core ライブラリとプラグインの両方が DLL 形式です。ユーザー側ではすべてがうまくいっています。ただし、開発者側では、Plugin-Core DLL プロジェクトで Base Forms が定義されていないと、プラグイン DLL プロジェクトをリンクできません。これは、基本フォームが実際には各プラグイン DLL プロジェクトで静的にリンクされていることを意味し、いつか基本フォームを変更して Plugin-Core DLL プロジェクトを再構築する場合、すべてのプラグイン DLL プロジェクトを再構築し、プラグイン.DLLを再リリースする必要があります。ユーザーも。

StackOverflow で検索して質問したところ、VCL フォームが DLL の境界を越えて継承できないという制限は、RTTI の競合 (?) によるものであることがわかりました。推奨される解決策は、ライブラリを DLL から BPL 形式に変更することです。これは、私が開発した 2 番目のバージョンです。次の2つを除いて、すべて問題ありません。

  1. プラグイン BPL から動的に読み込まれたフォームは、Windows タスクバーのメインの.EXEから分離されています。それは私が望んだものではありません。解決策は、 .EXEプロジェクトで「ランタイム パッケージを使用してビルド」を有効にしたことです。

  2. .EXEプロジェクトで「Build with runtime packages」を有効にした後、 vcl.bplrtl.bplなどの他の .BPL をユーザーにリリースする必要があります。これは私が望んでいたものではありません。

上記の 2 つの問題を同時に解決できることを知りたいですか? 私の考えでは、次のようにすれば、2 つの問題の両方を解決できます。

  1. .EXEプロジェクトで「ランタイム パッケージを使用してビルド」を無効にします。
  2. すべての.BPLプロジェクトで「ランタイム パッケージを使用してビルド」を有効にします。

このように、.EXEはvcl.bplrtl.bpl がバンドルされていなくても実行でき、依存ユニットが既にメインの.EXEの一部であるため、プラグイン.BPLを正常にロードできます。私は正しいですか?ただし、[ランタイム パッケージを使用してビルド] チェックボックスは、すべての.BPLプロジェクト オプションで無効になっています。その結果、ソリューションが機能するかどうかを確認する機会がありません。説明が長くなって申し訳ありません。会社のインターネット セキュリティ ポリシーにより、画像を添付できません。

4

1 に答える 1