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

标签 c++ dll interface implementation

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

如何实现?

我遇到了一个 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 标记为外部。

顺便说一句,我会这样做

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

关于c++ - 在主应用程序中声明的 dll 中实现接口(interface) - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13412128/

相关文章:

c++ - 反转 vector ,并构建另一个 vector

c++ - 在源文件中放置模板成员函数的特化定义(没有默认主体)是否安全?

c++ - 如何从其他类 C++ 访问单例

c++ - 如何在 64 位 DLL 中查找导出函数的地址?

c# - 使用接口(interface) - 设计模式方面

javascript - typescript 访问带有句点(.)运算符的特定对象的对象的变量

c++ - 返回字符串的静态方法

python-3.x - 如何使用 Python 以编程方式包装 C++ dll

angular - Typescript 接口(interface)中带有可选项目的固定长度数组

dll - 使用 OllyDbg 反汇编动态链接库