多个Dll通过“主”dll调用彼此的功能

时间:2011-02-05 12:09:12

标签: c++ dll object libraries circular-dependency

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

                                    Main.exe

                                   Engine.dll

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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