我有一个具有接口(抽象类)的主应用程序,并且此接口需要在主应用程序和外部dll中都有实现。
我将使用指向该接口的指针来访问方法,因此我将基于某种条件将指针分配给任何一种实现的地址。
如何做到这一点?
我在堆栈溢出中遇到了question标记为解决方案的答案
主应用程序中的界面
class IModule
{
public:
virtual ~IModule(); // <= important!
virtual void doStuff() = 0;
};
可以在主应用中实现
class ActualModule: public IModule
{
/* implementation */
};
并可以从dll导出函数以返回指向dll中实现的指针
__declspec (dllexport) IModule* CreateModule()
{
// call the constructor of the actual implementation
IModule * module = new ActualModule();
// return the created function
return module;
}
dll如何知道诸如IModule之类的东西存在?
我可以将IModule标记为extern并在dll中使用吗?
最佳答案
“ dll将如何得知类似IModule的东西存在?”
因为dll代码将包含声明IModule的头文件。头文件是在不同源文件之间共享声明的方法。 Dll对此没有影响,也不需要将IModule标记为extern。
顺便说一句,我会这样做
virtual ~IModule() {} // <= important!