一般的なケースをカバーする既存の回答がありますが、それらは少しあいまいであり、これについて確認する必要があります.
検討:
- 抽象基本クラス「インターフェース」から派生する既存の定義済みクラス。
- クラスは、インターフェイスを介して互いに通信する複数の dll にコンパイルされるライブラリの一部です。
それから加えて:
- 定義されたクラスの派生元となる 2 番目の「インターフェース」 (つまり、2 つのインターフェースを持つようになりました)。
- 新しいインターフェイスによってアクセスされる、定義されたクラスへの新しい仮想メソッド。
このライブラリをリンクするすべての dll を再コンパイルする必要がありますか?それとも、新しいメソッドを使用する dll のみを再コンパイルする必要がありますか?
編集:
元のインターフェースは動的メソッドを公開していDynamic(int OP, void* args)
ますが、新しいインターフェースにキャストする op を追加することは可能でしょうか?
COM は、既存のインターフェイスを破壊することなく、新しいインターフェイスをオブジェクトに追加する方法を教えてください。インターフェイスをスタックしたり、複数の継承を使用したりしますか???
これがどのように機能するかを説明しましょう。
静的にリンクされたライブラリ インターフェイス
In statically linked library
class Interface1
{
virtual Method1() = 0;
virtual Method2() = 0;
}
class NotReallyInterface2 : Interface1
{
virtual Method1() = 0;
virtual Method2() { // does something }
}
DLL内
In A.dll
Load statically linked library
class A : NotReallyInterface2
{
virtual Method1() { // does something }
}
In B.dll
Load statically linked library
class B: NotReallyInterface2
{
virtual Method1() { // does something different }
}
追加したい
class Interface3
{
virtual Method3() = 0;
}
私の継承構造が次のように見えるため、ここでいくつかの問題があります。
[a.dll [ library : Interface1 < NotReallyInterface2 ] < A ]
[b.dll [ library : Interface1 < NotReallyInterface2 ] < B ]
だから怖い
[ a.dll [ library : Interface1 < NotReallyInterface2 ] < Interface3 < A ]
動作しません。
編集 2
だから私は自分の問題を見つけました。どうやら、他の dll と実行可能ファイルが my を参照しているようNotReallyInterface2
です。これは、複数の dll と exe が同じ基本クラスを構築していることを意味します。したがって、これらの基本クラスの「コピー」が同期しなくなると、船はダウンします。つまり、 の単一のメソッド シグネチャを変更することはできませんNotReallyInterface2
。
これは、誰も参照NotReallyInterface2
していなければ機能していたはずであり、私は今、答えからそれを理解し、全体が理にかなっています.