c++ - DLL 如何访问 EXE 类?

标签 c++ class methods dll undefined

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

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

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

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

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

有没有人知道如何解决这个问题?我的输入接口(interface)类头包含在两边。该类包含 void 函数且未导出(我不知道是否可以导出。如果需要导出,请说明如何导出?)在此先感谢!

最佳答案

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

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

关于c++ - DLL 如何访问 EXE 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40411220/

相关文章:

c++ - 使用多个动态数组进行合并排序

c++ - 使用 OpenGL 在 C++ 中绘制 8 x 15 矩形网格 - 崩溃

java - 如果消除了对多重继承的限制,那么 Java 中的接口(interface)和抽象类有什么区别?

c++ - 关于 std::move 行为

css - Wordpress 侧边栏类

php - 具有特定类的 mysql_fetch_object

python - 使用方法还是函数?

javascript - 从 html 按钮调用类中的 javascript 方法

java - 使用 JNI 从 C++ 调用 Java 方法

C++ 将长十六进制字符串转换为二进制