c++ - 多个 Dll 通过 "main"dll 相互调用函数

标签 c++ dll object libraries circular-dependency

我正在构建一个游戏引擎(在 c++ 中),它被分成多个项目(在 windows 上编译为单独的 dll 和库,在 linux 中编译为共享对象)结构如下:

                                    Main.exe

                                   Engine.dll

          Graphics Engine.dll Physics Engine.dll Sound Engine.dll ...dll

Main.exe 初始化一个新引擎,然后该引擎创建图形、物理和声音引擎。这一切都很好,但是我现在想要例如图形引擎运行声音引擎中存在的函数,而不是直接通过 Engine.dll 中的函数运行。

但是有一个问题。 Main包括Engine,Engine包括Graphics、Physics和Sound。如果我现在告诉图形、物理和声音包含引擎并将引擎对象的引用传递给每个相应的“子引擎”,则存在循环依赖性问题...

我怎样才能让图形、物理和声音引擎与主引擎通信(因为目前它只是主引擎调用子引擎的所有功能的单向关系)?

最佳答案

您可以使用 Engine.dll 中的抽象类(即纯虚函数)公开接口(interface)。然后在Engine.dll中实现这个接口(interface)。然后创建具体此类的实例,并将该实例的引用/指针(作为抽象类引用/指针)传递给 GraphicsEngine.dll。现在,只要 GraphicsEngine 需要与 Engine 通信,它就可以使用这个实例。由于您只使用抽象类,因此不需要将 GraphicsEngine.dll 链接到 Engine.dll。所以不会有循环依赖。

关于c++ - 多个 Dll 通过 "main"dll 相互调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4906754/

相关文章:

Wordpress - 将多个 WP 查询对象合而为一?

c++ - ESP8266 错误 : macro "min" passed 3 arguments, 但只需要 2

c++ - 尝试制作我的库的 DLL 并获取未解析的外部符号 __tmainCRTStartup

c++ - LoadLibrary A 在哪里寻找文件?

arrays - 如何使用 typescript 获取枚举的所有值?

java - 将对象添加到集合中

c++ - 如何在 Clang 中使用 C++ 模块?

c++ - C中的静态和C++中的静态之间的区别??

c++ - 从多个线程访问随机数引擎

c++ - 我可以让 Visual Studio 将调试 DLL 创建为 XXXd.DLL 而不是 XXX.DLL 吗?