制作DLL文件而不依赖

时间:2012-09-02 07:49:28

标签: c++ visual-studio dll

过去我在我的应用程序中使用过其他开发人员制作的dll。现在,我的愿望是学习制作DLL文件。所以,我开始在visual studio 2008中开发dll文件作为c ++项目。

完成教程后,我成功创建了dll项目。而且,当我创建另一个c ++控制台应用程序来测试前面提到的dll时,我遇到了我需要包含lib文件和前一个dll项目的头文件。我想包括自制头部取决于我如何实现我的项目。但是,如何在客户端应用程序中包含lib文件?

这不是一个额外的依赖吗?如果我的问题不明确,那么我将再次简要解释一下:我已经创建了一个dll文件作为VS2008 c ++项目。当我尝试从另一个c ++项目访问dll时,我需要包含上一个项目的lib文件。所以,我想知道如何避免包含任何内容或任何依赖项,并仍在我的客户端应用程序中使用dll ...

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

2 个答案:

答案 0 :(得分:1)

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

Lib文件是静态链接的,因此就您的客户端应用程序而言,没有其他依赖项。

答案 1 :(得分:0)

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

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

  2. 库依赖:如果你的.dll依赖于另一个.dll,除了使用这两个库之外你不能做任何事情,因为只有LibA在没有LibB的情况下才能工作。一种解决方案是将LibB作为静态库,然后在LibA中静态链接它,因此它包含在LibA.dll中,你只需要它(你需要它们两个,但LibB二进制文件现在在LibA文件中)。