我正在构建一个游戏引擎(在 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/