Dependencies C++;编译模块依赖性问题。逻辑问题

Dependencies C++;编译模块依赖性问题。逻辑问题,dependencies,Dependencies,我有两个dll模块。模块A和B“A”调用功能“B”。“B”调用函数“A”来放置结果。“B”依赖于“A”,“A”依赖于“B”。当我编译(清理)项目时,我遇到了一个问题。(我必须删除模块依赖项-注释一些行-编译“A”-然后是“B”,然后取消注释行,添加依赖项,然后再次编译“A”) 模块A:callFuncmoduleB(参数);模块B callFuncmoduleB//Qt logic使用信号->插槽创建新线程和Http请求。在完成Http请求时,解析它时调用ParseFuncModuleB;模块B

我有两个dll模块。模块A和B“A”调用功能“B”。“B”调用函数“A”来放置结果。“B”依赖于“A”,“A”依赖于“B”。当我编译(清理)项目时,我遇到了一个问题。(我必须删除模块依赖项-注释一些行-编译“A”-然后是“B”,然后取消注释行,添加依赖项,然后再次编译“A”)


模块A:callFuncmoduleB(参数);模块B callFuncmoduleB//Qt logic使用信号->插槽创建新线程和Http请求。在完成Http请求时,解析它时调用ParseFuncModuleB;模块B callPARSEfuncmoduleB:callSETRESULTFuncmoduleA(结果)。。。。。模块A:callSETRESULTFuncmoduleA调用FuncModuleGUI并将结果设置为GUI

首先,您确实应该尽可能不产生循环依赖项。有很多方法,哪种方法最适合你取决于你的依赖性的确切性质

  • 将两个DLL合并为一个
  • 使用回调机制(函数指针,B中定义的一些接口)在运行时传递依赖项 e、 g.
    callFunctionInB(args,callbackInA)
  • -
如果您必须具有循环依赖项,那么您将不得不从一开始就深入工具链。简而言之,您可以创建一个存根
.LIB
文件来链接到DLL,而无需实际编译DLL


参考资料:

首先,您确实应该尽可能避免产生循环依赖关系。有很多方法,哪种方法最适合你取决于你的依赖性的确切性质

  • 将两个DLL合并为一个
  • 使用回调机制(函数指针,B中定义的一些接口)在运行时传递依赖项 e、 g.
    callFunctionInB(args,callbackInA)
  • -
如果您必须具有循环依赖项,那么您将不得不从一开始就深入工具链。简而言之,您可以创建一个存根
.LIB
文件来链接到DLL,而无需实际编译DLL


参考资料:

头文件应该可以解决这个问题。嗯。。。我包括每个项目中的所有头文件。如果其中一个已经存在,那么编译另一个并不成问题。问题是如何解决clean项目的编译循环依赖关系。错误是由编译器报告的还是由链接器报告的?头文件应该可以解决这个问题。嗯。。。我包括每个项目中的所有头文件。如果其中一个已经存在,那么编译另一个并不成问题。问题是如何解决clean项目的编译循环依赖关系。错误是由编译器报告的还是由链接器报告的?您的答案是有用的。谢谢。你的回答很有用。谢谢