2011-12-24 18 views
3

私はプログラムfoo.exeを持っており、実行時にプラグインbar.dllをロードすると、bar.dllのコードにfoo.exeのクラスを使用させる方法を教えてください。そして、bar.dllがfoo.exeからクラスを派生させることは可能でしょうか?また、ソリューションはクロスプラットフォームですか?機能をプラグインライブラリにどのように公開しますか?

編集:ここで私は何をしようとしているの多くはである:通常


//foo.exe 
class Node { 
public: 
    void SetName(const string& n) { ... } 
    const string& GetName() { ... } 
}; 

//bar.dll 
class TransformNode : public Node { 
public: 
    void DoSomething() { 
     SetName(...); //basically, can I inherit functionality from foo.exe (SetName and GetName) 
         //and reuse the code in a derived class in bar.dll? 
    } 
}; 

答えて

2

bar.dllにfoo.exeのクラスを使用させるには、仮想関数を持つクラスのインスタンスをfoo.exeからbar.dllに渡す必要があります。 Bar.dllはfoo.exeから来た仮想関数を呼び出します。


bar.dllが戻っFOO.EXEに派生clasesを渡し、そのクラスとの仮想関数を呼び出すFOO.EXE持っているはい、それは可能です。


このソリューションは、クロスプラットフォームのだろうが、あなたは大きな問題共有ライブラリとexeファイルの間でABIを壊していないことを確認することを持ってしようとしています。最も簡単な変更でさえ、簡単にabiを壊すことができます。

Thisは、abiを壊す可能性のある優れた紹介です。

1

私はプラグインを開発するとき、私は一般的に、プラグイン作成者が依存できるインタフェースを提供します。

このインターフェイスを介して、プラグインは、オブジェクトを表示して相互作用させることができるオブジェクトやクラスにアクセスすることができます。

+0

インターフェイスでは、純粋な仮想クラスを意味するのか、それとも実装にいくつかの関数を含めることができますか? – Mark

関連する問題