我將我的項目分成動態庫和它的客戶端代碼。如何在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的完美。但是我不能使用MinGW編譯DLL,因爲錯誤「未定義引用ObjectModel :: Get()」。是否有可能以這種方式構建DLL?
否。如果您在另一個庫中實現了'ObjectModel :: Get()',則需要鏈接該庫。 –
@ n.m。我知道這是脫離主題,但也許你知道另一種獲得相同功能的方法。 – flipback
在您的DLL中有一個'init'函數,您明確地傳遞它需要的所有功能,但無法鏈接。在你的情況下,它看起來像你需要某種ObjectModel工廠。查看工廠模式。在主程序中創建一個工廠,並根據需要將其傳遞給模塊。 –