問題タブ [bpl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - パッケージの `requires` 句を条件付きにすることはできますか?
Anders Melander の DragDrop パッケージを使用しています。
Win32 モードでは問題なく動作しますが、64 ビットでは調整が必要です。
これを行う{$IFNDEF CPUX64}
には、designIDE への参照をコメント アウトします。
ただし、パッケージソースをから変更すると
に
コンパイラは、パッケージ ソースの DesignIDE 行を単純に破棄し、次のものだけを残します。
これは X64 では問題なく動作しますが、32 ビット用に再構築するとすぐに壊れます。
win32 のデザインタイム アイテムを含む 1 つのパッケージを、X64 用に IFDEF アウトされた競合するアイテムと一緒にする方法はありますか? または、X64 用に別のランタイム パッケージを作成する必要がありますか?
c++builder - C++ Builder 2010 から C++ Builder 10 Seattle にアップグレードされたプロジェクトでビルドした後に bpl をインストールできない
C++ Builder 2010 からシアトルへの更新を行っている大規模なプロジェクト グループがあります。かなりのジャンプです:)私はいくつかの問題に遭遇し、それらをすべて解決することができましたが、昨日は少し頭をかきました。1 つのプロジェクトが、システムの他の部分で使用される bpl を構築します。いくつかの小さなコードを微調整した後、正常にコンパイルされますが、プロジェクトを右クリックして bpl を「インストール」すると、次のようなエラー メッセージが表示されます。
プロシージャ エントリ ポイント @TLanguageDialog@$bctr$qqrp25System@Classes@TComponent がダイナミック リンク ライブラリ TranslationTools.bpl に見つかりませんでした
私の記憶が正しければ、TComponent は VCL ライブラリの一部であるため、ここでの問題とその解決方法を理解しようとしています。bpl の構築方法が変更されたので、以前は存在しなかった何かが期待されていますか? 前述のとおり、問題なくコンパイルされますが、念のため、インクルード パスと lib パスの設定を示します。
インクルード: $(BDSINCLUDE)\windows\vcl;$(BDSINCLUDE)\windows\vcl\design
ライブラリ: $(BDSLIB)\$(PLATFORM)\$(Config);$(BDSLIB)\$(PLATFORM)\Release\psdk
linker-errors - C++ ビルダー パッケージのエクスポート リンク エラー
TForm サブクラス、たとえばTForm_Subを含む*.bpl プロジェクトBPL_Aを作成します。
ヘッダー ファイルForm_Sub.hは次のように なります。
ソース ファイルForm_Sub.cppは次のようになります。
そして、別の *.bpl プロジェクトBPL_Bを作成して、TForm_Sub インスタンスを動的に作成します。
BPL_B の Requires セクションに BPL_A.bpi を追加します。ただし、BPL_B をビルドすると、次のリンク エラーが発生します。
[ILINK32 エラー] エラー: モジュール xxx.OBJ 内の SomeClass::CreateUI() をエクスポートすると、ユニット BPL_A]Form_Sub 内の __fastcall TForm_Sub::TForm_Sub() が参照されます。
何が欠けているのかわかりません。
package - カスタム検索パスを使用して読み込まれたパッケージを遅らせる
BPLプロジェクトを作成し、出力 .bpi ファイルを別の EXE プロジェクトに追加しました。EXEプロジェクトは適切にコンパイルおよびリンクされます。.bplファイルを.exeファイルと同じフォルダーに置くと、EXE は正常に動作します。ただし、.bplファイルを.exeファイル以外のフォルダーに置くと、 EXEが実行されず、「XXX.bpl が見つからないため、プログラムを開始できません...」と表示されます。
DLL版も書いて、.dllファイルを.exeファイル以外のフォルダに入れました。.dllをEXEプロジェクトの [C++ リンカ] -> [詳細設定] -> [DLL の読み込みを遅らせる] リストに追加しSetDllDirectory()
、カスタム検索パスに関数呼び出しを追加しました。EXEは問題なく動作します。.bplを介してカスタム検索パスを使用して遅延ロードした場合、 .bplは.dllと同じように動作しないようSetDllDirectory()
です。よろしいですか?
テスト BPL コードは次のようになります。
" TestPackage.h "
" TestPackage.cpp "
そして、テスト フォーム アプリケーション コードは次のようになります。
" TestApp.cpp "
アプリケーション オプションで「 Build with runtime packages」と「Dynamic RTL 」の両方を無効にしました。TestPackage.bplをEXEとしてフォルダーに配置すると、EXEは正常に動作しました。EXEとは別にBPLをアップグレードして、他の番号を返すようにすることもできます。したがって、最終的な結果は、カスタムBPLをEXEでデプロイできるようであり、 RTLやVCLなどの他のBPLは、依然としてEXEで静的にリンクされています。唯一の制限は、カスタムBPLがEXEと同じフォルダーにある必要があることです。TestPackage::GetInt()
、これを克服する方法はありますか?
bpl - 「vcl.bpi」を BPL プロジェクトに追加する方法
C++ ビルダー 2009 を使用して BPL プロジェクトを作成します。「Requires」リストには、デフォルトで「rtl.bpi」があります。いくつかの VCL フォームを「含む」リストに追加し、BPL プロジェクトをビルドしようとしました。「 XXX.OBJ から参照された未解決の外部 'Forms::TForm::' 」などのリンカ エラーが原因で、ビルドが失敗します。「 Requires」リストに「 vcl.bpi」を追加する必要があることは明らかです。次の手順を実行します。
- 「 Requires 」を右クリックし、「参照の追加」を選択します。
- [追加] ダイアログ --> [必須] タブで、[パッケージ名] テキスト編集で「vcl.bpi」と入力し、[OK] をクリックします。
- 「 File vcl.bpi not found 」というエラー ダイアログが表示されます。
"vcl.bpi" を手動で追加するにはどうすればよいですか?
plugins - .EXE とカスタム .BPL ファイルのみをデプロイする方法は?
プラグインを使って 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つを除いて、すべて問題ありません。
プラグイン BPL から動的に読み込まれたフォームは、Windows タスクバーのメインの.EXEから分離されています。それは私が望んだものではありません。解決策は、 .EXEプロジェクトで「ランタイム パッケージを使用してビルド」を有効にしたことです。
.EXEプロジェクトで「Build with runtime packages」を有効にした後、 vcl.bplやrtl.bplなどの他の .BPL をユーザーにリリースする必要があります。これは私が望んでいたものではありません。
上記の 2 つの問題を同時に解決できることを知りたいですか? 私の考えでは、次のようにすれば、2 つの問題の両方を解決できます。
- .EXEプロジェクトで「ランタイム パッケージを使用してビルド」を無効にします。
- すべての.BPLプロジェクトで「ランタイム パッケージを使用してビルド」を有効にします。
このように、.EXEはvcl.bplとrtl.bpl がバンドルされていなくても実行でき、依存ユニットが既にメインの.EXEの一部であるため、プラグイン.BPLを正常にロードできます。私は正しいですか?ただし、[ランタイム パッケージを使用してビルド] チェックボックスは、すべての.BPLプロジェクト オプションで無効になっています。その結果、ソリューションが機能するかどうかを確認する機会がありません。説明が長くなって申し訳ありません。会社のインターネット セキュリティ ポリシーにより、画像を添付できません。
c++ - Delphi BPL から基本型を継承する C++ クラスを DLL にエクスポートすることは可能ですか?
Gctable::TGcTable
継承元のクラスを作成し、 .DLLPgaccess::TPgTable
にエクスポートしたい
質問:可能ですか?
私はそのようなクラス定義を持っています:
TDump ユーティリティを使用して、.dll からエクスポートされたメンバーを確認すると、次のように表示されます。
Gctable::SqlSchemaHelper
したがって、クラスはエクスポートされましたが、Gctable::TGcTable
TPgTable はpgdacvclXXX.bpl