在主应用程序中声明的dll中实现接口 - C ++

时间:2012-11-16 07:21:50

标签: c++ dll interface implementation

我有一个主应用程序,它有一个接口(抽象类),这个接口需要在主应用程序和外部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中使用吗?

1 个答案:

答案 0 :(得分:1)

'怎么会知道像IModule这样的东西存在?'

因为dll代码将包含声明IModule的头文件。头文件是在不同源文件之间共享声明的方法。 Dll对此没有任何区别,也没有必要将IModule标记为extern。

BTW我会这样做

virtual ~IModule() {} // <= important!