C ++ | DLL / EXE-如何从导出的类调用另一个类方法?

时间:2018-09-16 17:08:40

标签: c++ class inheritance dll exe

我有一个要使用DLL的项目。

我正在将工厂函数导出到我的exe中:

color;
constructor(private changeService: ChangeService) {}

this.changeService.colour.subscribe(color => this.color = color)

这很好用。在我的Init类中,我有一个方法可以从Initializer类中方便地创建另一个类:

extern "C" __declspec(dllexport) 
BaseInit* __cdecl CreateInterface( void ) 
{
    return new Initializer;
}

这似乎也可行。我得到一个非NULL的指针。但是,当尝试从此类(在我的exe程序中)调用TestFunction时,我得到了:

  

LNK2001无法解析的外部符号“ public:虚拟void __cdecl   AnotherClass :: TestFunction(void)“   (?TestFunction @ AnotherClass @@ UEAAXXZ)

class IAnotherClass { public: virtual void TestFunction(); ... class AnotherClass : public IAnotherClass { public: void TestFunction(); ... class Initializer : public BaseInit { IAnotherClass* Create(void) { return new AnotherClass; } ... -body在我的DLL项目中位于单独的.cpp -file

我做错了吗,实际上我需要为每个不同的类实例使用单独的工厂函数吗?甚至可以这样做吗?

1 个答案:

答案 0 :(得分:3)

您需要向要在dll之外可用的每个类和函数添加import WarpSpeed from './warpspeed.js',只要导出包含类,就不需要标记方法。

请注意,在类中,declspec位于__declspec(dllexport)和类名称之间:

class

您还需要定义一个宏,该宏根据您是构建dll还是exe在class __declspec(dllexport) Exported { }; __declspec(dllexport)之间切换标头,例如:

__declspec(dllimport)