0

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

按照教程完成后,我成功创建了 dll 项目。而且,当我创建另一个 c++ 控制台应用程序来测试上述 dll 时,我发现我需要包含之前 dll 项目的 lib 文件和头文件。我想包括自制标题取决于我如何实现我的项目。但是,在客户端应用程序中包含 lib 文件怎么样?

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

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

4

2 回答 2

1

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

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

于 2012-09-02T08:14:33.137 回答
0

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

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

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

于 2012-09-02T08:07:13.120 回答