プロジェクトを動的ライブラリとクライアントコードに分割しました。C++のクライアント側でDLLで宣言されたメソッドを実装する方法
私はクラスObjectModelを持っています。
object_model.h:
class ObjectModel {
public:
virtual ~ObjectModel();
static ObjectModel& Get();
/* Some other methods */
protected:
ObjectModel();
ObjectModel(const ObjectModel&);
ObjectModel& operator=(ObjectModel&);
};
私は図書館で、クライアントコードでメソッドObjectModel::Get()
を使用します。私は拡張オブジェクトを取得し、別のプロジェクトのライブラリで使用する必要があるので、ライブラリにメソッドを実装していません。クライアント側では
:
#include <object_model.h>
class ExObjectModel : public ObjectModel {
}
ObjectModel& ObjectModel::Get() {
static ExObjectModel m;
return m;
}
int main() {
ObjectModel &m = ObjectModel::Get();
/* ... */
}
それは完全にLinux上で動作します。しかし、 "ObjectModel :: Get()"への未定義のエラーのため、MinGWを使ってDLLをコンパイルできません。そのような方法でDLLを構築することは可能ですか?
いいえ 'ObjectModel :: Get()'が別のライブラリに実装されている場合は、そのライブラリにリンクする必要があります。 –
@ n.m。私はそれが話題ではないことを理解していますが、多分あなたは同じ機能を得る別の方法を知っています。 – flipback
あなたのDLLに 'init'関数を用意してください。ここで関数は必要だがリンクすることはできないすべての関数を明示的に渡します。あなたの場合は、何らかの種類のObjectModelファクトリが必要なようです。工場パターンを参照してください。メインプログラムにファクトリを作成し、必要に応じてモジュールに渡します。 –