我有一个具有接口(抽象类)的主应用程序,并且此接口需要在主应用程序和外部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!

10-07 14:38