C++ Visual Studio中的嵌套DLL包含配置

C++ Visual Studio中的嵌套DLL包含配置,c++,visual-studio,dll,dllimport,dllexport,C++,Visual Studio,Dll,Dllimport,Dllexport,我有一个Visual Studio解决方案,包含几个项目: Utils:DLL 渲染器引擎:DLL 物理引擎:DLL 游戏项目:EXE 这里有一个模式: 渲染器和物理DLL包括Utils DLL。在我决定创建这个GameProject(VisualStudio中的一个控制台应用程序项目)之前,VisualStudio配置的一切都不是问题。GameProject将从渲染器和物理引擎生成导出类的实例 如果我想让我的游戏项目链接没有问题,我需要包括我的Utils DLL项目的include文件夹

我有一个Visual Studio解决方案,包含几个项目:

  • Utils:DLL
  • 渲染器引擎:DLL
  • 物理引擎:DLL
  • 游戏项目:EXE
这里有一个模式:

渲染器和物理DLL包括Utils DLL。在我决定创建这个GameProject(VisualStudio中的一个控制台应用程序项目)之前,VisualStudio配置的一切都不是问题。GameProject将从渲染器和物理引擎生成导出类的实例

如果我想让我的游戏项目链接没有问题,我需要包括我的Utils DLL项目的include文件夹和.lib。我不明白为什么

以下是VS配置屏幕截图:

包含配置:

Lib Conf:

我必须在游戏项目的VisualStudio配置中包含嵌套DLL,这正常吗?有人有类似的问题吗?

如果您的程序(.exe)只使用dll接口声明和/或定义的内容,那么您的程序构建不需要知道这些dll在其实现中使用的任何内容

但是,如果utils项目中的任何内容在任一dll的接口头中可见,并且您在程序代码中使用该接口头,则您的程序与utils.dll之间存在依赖关系。 现在,您需要通知构建环境在何处查找内容

具体而言:

如果需要为生成包含UTIL目录,则在
渲染器-
和/或
PhysicEngine
的一个或多个头文件的中有一个包含UTIL项目的头文件

如果您需要为构建包含utils的lib文件,则会调用
utils.dll的一个或多个导出函数(或导出类的方法)


解决方案:清理dll的接口头文件

您是否知道包括(头文件)、导出库文件(.lib)、静态库文件(也包括.lib)和动态库文件(.dll)之间的区别?在编译和链接之间也是如此?@VTT没有问题。我必须包含的.lib是导入库类型。不是静态库。只有当我们指定是否导出带有uu declspec(dllexport)标识符的类/成员或函数时,才会生成它们。谢谢@engf-010。我的物理引擎和渲染器引擎包括UTIL,因为它们需要利用某些特定类(如我导出的计时器类)。只有他们在使用Utils,而不是我的游戏项目(只包括我的引擎)。所以我不应该在我的游戏项目中包含Utils头文件?理想情况下是这样的。从您的描述中我了解到,您的dll接口头需要一分为二。首先是dll的客户端的纯接口头。以及用于dll内部工作的第二个标头(这将仅由引擎源包含)。另一种方法是将includes-to-utils头从引擎头直接移动到引擎的源文件中。