C++ 在dll中实现一个接口,该接口在主应用程序-C+中声明+;

C++ 在dll中实现一个接口,该接口在主应用程序-C+中声明+;,c++,dll,interface,implementation,C++,Dll,Interface,Implementation,我有一个主应用程序,它有一个接口(抽象类),这个接口需要在主应用程序和外部dll中都有实现。 我将使用指向这个接口的指针来访问这些方法,所以我将根据某些条件将指针分配给任何一个实现的地址 如何做到这一点 我遇到一个堆栈内溢出,答案标记为solution 主应用程序中的界面 class IModule { public: virtual ~IModule(); // <= important! virtual void doStuff() = 0; }; class

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

如何做到这一点

我遇到一个堆栈内溢出,答案标记为solution

主应用程序中的界面

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!

virtual~IModule(){}//好的,如果我使用同一头文件的两个副本是否合适。一个在主应用程序中,一个在dll中。我只想独立编译这两个项目。除了同步问题,图片中还会出现什么问题。好吧,不要使用两个副本。只要有一个,告诉编译器在哪里找到它。您已经遇到了足够多的版本控制问题。