DLL 如何访问 EXE class?

How can a DLL access an EXE class?

我正在做一个项目,我试图模块化一些组件。其中之一是窗口化。不过,我正在尝试将输入传回主 EXE,我是通过一个用户界面函数执行此操作的,该函数依次调用主输入系统 class 中的主要方法。后者 class 太复杂了,甚至无法在两个系统上使用 header(取决于许多 classes)。

无论如何,实际问题是我无法访问输入接口中的任何方法class!

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

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

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

有没有人知道如何解决这个问题?我的输入界面classheader两边都包含了。 class包含void函数,不导出(我不知道是否可以导出,如果需要导出,请说明如何?)在此先感谢!

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

这需要 EXE 创建输入对象并将它们传递给 DLL。如果 DLL 需要创建输入对象,则需要从 EXE 中导出一个因子方法,并在运行时使用 LoadLibrary 等动态定位它。