我有一个要使用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
我做错了吗,实际上我需要为每个不同的类实例使用单独的工厂函数吗?甚至可以这样做吗?
答案 0 :(得分:3)
您需要向要在dll之外可用的每个类和函数添加import WarpSpeed from './warpspeed.js'
,只要导出包含类,就不需要标记方法。
请注意,在类中,declspec位于__declspec(dllexport)
和类名称之间:
class
您还需要定义一个宏,该宏根据您是构建dll还是exe在class __declspec(dllexport) Exported
{
};
和__declspec(dllexport)
之间切换标头,例如:
__declspec(dllimport)