私はデルファイIDEエキスパートで働いていますが、依存関係の問題を回避するために、これらの回答の1つで提案されているように、このエキスパートをdllエキスパートとして再構築することを考えていました。今では、エキスパート(bplとしてコンパイル)がグローバル変数(インスタンス)にアクセスScreen
します。 Application
Delphi IDEの)ので、エキスパートをdllとしてコンパイルするかどうか疑問に思っていましたが、これらの変数にアクセスできます。また、知りたいです。which are the main differences between a bpl delphi expert and a dll delphi expert?
2 に答える
ウィザードをDLLまたはパッケージとしてコンパイルする必要がありますか?パッケージは、IDEを再起動せずにロードおよびアンロードするのが簡単です(したがって、デバッグが簡単です)が、IDEでユニット名の競合が発生する可能性があります。ウィザードのユニットの名前が、ロードされた別のデザイン時パッケージのユニットの名前と一致すると、競合が発生します。この場合、両方のパッケージを同時にロードすることはできません。推奨される回避策は、すべてのユニット名に「一意の」プレフィックスを付けることです。たとえば、GExpertsは、ユニットの名前プレフィックスとして「GX_」を使用します。
OTAに関するこの非常に優れた情報源から:GExperts
グローバル変数にアクセスすると、それらはメインのBDS.exeに対してグローバルではなく、DLLに対してグローバルなグローバル変数になります。よくわかりませんが、Formsでリンクした場合、DLLには独自のScreenおよびApplicationグローバル変数とVCLのコアがあると思います。
IDE自体に属するものには、Open Tools Api(OTA)を介してアクセスします。とにかく、通常、IDE間でオブジェクトを共有することはないと思います。そうしようとすると、問題が発生します。OTAをバイパスするために行うことはすべて、特にIDEの将来のバージョンでは、奇妙な方法で破損する可能性があります。
もちろん、依存関係の問題はBPLベースのパッケージを使用しない大きな理由ですが、さらに大きな理由は、ツールの内部とIDEの内部を完全に分離することだと思います。
実行可能ターゲットと同様に、DLLターゲットは静的にリンクされていることに注意してください。それが違いの核心です。専門家が合法的な公開文書化されたOTAインターフェースのみを使用する機能を提供する場合、DLLへの移行は問題がないはずです。BPLで可能なバックドアハックを使用する場合、それ以上アドバイスすることはできません。