Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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++_Visual Studio_Dll - Fatal编程技术网

C++ 创建没有依赖关系的DLL文件

C++ 创建没有依赖关系的DLL文件,c++,visual-studio,dll,C++,Visual Studio,Dll,过去,我在我的应用程序中使用了其他开发人员制作的dll。现在,我的愿望是学习如何制作dll文件。因此,我开始在Visual Studio 2008中开发DLL文件作为C++项目。 在完成教程之后,我成功地创建了dll项目。而且,当我创建另一个C++控制台应用程序来测试上述DLL时,我经历了我需要包括LIB文件和前DLL项目的头文件。我想包含自制头取决于我如何实现我的项目。但是,在客户端应用程序中包含lib文件呢 这不是一种额外的依赖吗?如果我的问题不清楚,那么我将再次简要解释:我已经创建了一个D

过去,我在我的应用程序中使用了其他开发人员制作的dll。现在,我的愿望是学习如何制作dll文件。因此,我开始在Visual Studio 2008中开发DLL文件作为C++项目。 在完成教程之后,我成功地创建了dll项目。而且,当我创建另一个C++控制台应用程序来测试上述DLL时,我经历了我需要包括LIB文件和前DLL项目的头文件。我想包含自制头取决于我如何实现我的项目。但是,在客户端应用程序中包含lib文件呢

这不是一种额外的依赖吗?如果我的问题不清楚,那么我将再次简要解释:我已经创建了一个DLL文件作为VS2008 C++项目。当我试图从另一个C++项目访问DLL时,我需要包括以前项目的LIB文件。因此,我想知道如何避免包含任何内容或任何依赖项,并在客户端应用程序中仍然使用dll

如果我的话毫无意义,那么对不起。。。我是dll相关内容的新手…

您有两个问题(假设您的库是LibA,而另一个库是LibB):

  • Headers依赖关系:LibA Headers文件似乎有#include指令来读取LibB的头文件。在这种情况下,当您将LIbA加载到另一个项目中时,如果不包含LibB头路径,则无法解析这些#include。为了避免这种情况,必须创建LibA,使LibB头只出现在.cpp文件中,而不出现在.h文件中。一种选择是使用“转发声明”(在互联网上查看,你会学到很多东西,在这里重复这些基本知识是没有用的)

  • 库依赖关系:如果你的.dll被另一个.dll依赖,你只能使用这两个库,因为没有LibB,LibA就不能工作。一种解决方案是将LibB作为静态库,然后在LibA中静态链接它,因此它包含在LibA.dll中,您只需要这样做(您总是需要这两个库,但LibB二进制文件现在位于LibA文件中)


  • LIB文件是一个导入库,其中包含用于在运行时加载DLL的代码;VisualStudio创建它是为了方便您,这样您就不需要在客户端应用程序中编写大量样板导入代码

    Lib文件是静态链接的,因此就您的客户端应用程序而言,没有额外的依赖关系