3

小売アプリケーションへのプラグインとして機能する小さな COM サーバーを Delphi 2010 で作成しました。小売アプリケーションは、それぞれを呼び出す任意の数の追加インターフェイスを登録する「検出」インターフェイスを探しますTAutoObjectFactory.Create。これは問題なく機能しています。すべてのプラグイン インターフェイスは設計どおりに機能します。

しかし、コードを複製する必要がないように、あるインターフェイスのパブリック メソッドを別のインターフェイスから呼び出したいと考えています。ComClassManager.ForEachFactory使用する必要があるインターフェイスの ClassID を探して呼び出すだけです。それもうまくいきました!

しかし、クラスを見つけたので、一見些細な最終ステップに困惑しています。実際にそのメソッドの 1 つを呼び出すために見つけたクラス (またはクラス参照?) を使用またはキャストする方法です。

に送信した「FactoryProc」ではForEachFactory、の ComClass プロパティが求めてTComObjectFactoryいるものであると想定していますが、それは TClass 型であり、それが指す実際のクラス オブジェクトへのクラス参照です (少なくとも、これを正しく理解してください)。私はクラス参照について少し曖昧で、このプロパティをキャストまたは逆参照しようとすると、アクセス違反またはコンパイラ エラーが発生しました。

助言がありますか?

4

1 に答える 1

3

You're right in your comment, ComClassManager deals with classes, not instances. What you need is (your application-local implementation of) running object table (or something similar), so plugin instances can interact with each other.

How to actually implement it depends on what you really need, e.g. call methods on all running instances, or only on instances of specific classes.

于 2013-02-20T13:49:04.927 に答える