【问题标题】:Implementing an interface in dll which is declared in main app - C++在主应用程序中声明的dll中实现接口 - C++
【发布时间】:2012-11-04 21:57:41
【问题描述】:

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

【问题讨论】:

    标签: c++ dll interface implementation


    【解决方案1】:

    'dll如何知道像IModule这样的东西存在?'

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

    顺便说一句,我会这样做

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

    【讨论】:

    • 好的,如果我使用同一个头文件的两个副本是不是很好。一个在主应用程序中,一个在 dll 中。我只想独立编译这两个项目。除了同步问题之外,还会出现什么问题。
    • 好吧,不要使用两个副本。只要有一个,告诉编译器在哪里可以找到它。你已经有足够多的版本控制问题了。
    猜你喜欢
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多