2016-11-03 111 views
0

我正在开发一个项目,试图模块化一些组件。其中之一是开窗。我试图将输入回传给主EXE,而我通过一个用户界面函数来执行此操作,该函数又调用主输入系统类中的主要方法。后一类太复杂了,甚至没有一个头可用于两个系统(取决于很多类)。DLL如何访问EXE类?

反正,所以实际的问题是我无法访问输入接口类中的任何方法!

class WINDOW_EXPORT_CLASS GameWindow { 
private: 
    InputInterface *input; 
    virtual void SetInputPointer(InputInterface *); 
    ... 
}; 

这是在我的DLL/SO文件中,我可以访问所有这些。但我无法访问输入的成员。 Bash崩溃与符号查找错误:

./bin/window.so: undefined symbol: _ZN14InputInterface16SetMouseInWindowEb 

有没有人有任何想法如何解决这个问题?我的输入接口类标题包含在两侧。这个类包含void函数,并且不会被导出(我不知道它是可以的,如果需要导出,请告诉我怎么做?)提前致谢!

+1

你可能需要一个插件接口。 –

+0

其他用户,1201ProgramAlarm,不得不写答案,但我真的不知道你的意思,由和,InputInterface的头是可执行文件,它的头中的可执行文件和DLL都被引用。使功能虚拟解决了问题。 –

回答

1

可以让你想从DLL虚拟访问方法。然后,当你调用一个函数时,函数将在vtable(已经在EXE中设置)中查找,而不是通过导出的符号名称查找。

这要求EXE创建输入对象并将它们传递给DLL。如果DLL需要创建一个输入对象,你需要从EXE导出系数法和动态定位它在运行时用调用LoadLibrary等

+0

确认:使每个功能虚拟做,工作,谢谢! –