我有一个主应用程序,它有一个接口(抽象类),这个接口需要在主应用程序和外部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;
}
如何知道像 IModule 这样的东西?
我可以将 IModule 标记为 extern 并在dll中使用吗?
答案 0 :(得分:1)
'怎么会知道像IModule这样的东西存在?'
因为dll代码将包含声明IModule的头文件。头文件是在不同源文件之间共享声明的方法。 Dll对此没有任何区别,也没有必要将IModule标记为extern。
BTW我会这样做
virtual ~IModule() {} // <= important!