Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 多Dll';尽管如此,我们还是互相调用函数;“主要”;动态链接库_C++_Dll_Object_Libraries_Circular Dependency - Fatal编程技术网

C++ 多Dll';尽管如此,我们还是互相调用函数;“主要”;动态链接库

C++ 多Dll';尽管如此,我们还是互相调用函数;“主要”;动态链接库,c++,dll,object,libraries,circular-dependency,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

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

                                    Main.exe

                                   Engine.dll

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

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


我如何让图形、物理和声音引擎与主机通信(因为目前只有单向关系,主机调用子引擎的所有功能)

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