0

我有一个主应用程序,它有一个接口(抽象类),这个接口需要在主应用程序和外部 dll 中都有实现。我将使用指向此接口的指针来访问方法,因此我将根据某些条件将指针分配给任何一个实现的地址。

如何做到这一点?

我在堆栈溢出中遇到了一个问题,其中标记为解决方案的答案说

主应用程序中的界面

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 中使用吗?

4

1 回答 1

1

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

因为 dll 代码将包含声明 IModule 的头文件。头文件是在不同源文件之间共享声明的方式。Dlls对此没有影响,并且没有必要将IModule标记为extern。

顺便说一句,我会这样做

virtual ~IModule() {} // <= important!
于 2012-11-16T07:30:10.227 回答