【问题标题】:Linking DLL to DLL将 DLL 链接到 DLL
【发布时间】:2012-06-21 22:11:46
【问题描述】:

我正在向具有多个 DLL 的 Visual Studio 2010 解决方案添加代码。一些 DLL 依赖于其他 DLL。

我想知道如何指定一个(现有)DLL 的 lib 文件应该输入到另一个(新)DLL。

首先,如何指定应该在现有的DLL项目中创建一个lib文件?

二、如何表示新建的DLL工程要依赖已有的lib文件?

代码编译良好。我得到了未解决的外部问题。

【问题讨论】:

    标签: c++ dll header-files


    【解决方案1】:
    1. 在项目属性中:您必须在每个项目的属性中添加库引用——包括生成 DLL 的项目。

      假设项目 DLL_B 使用 DLL_A。在解决方案资源管理器中选择 DLL_B,按 Alt-Enter,转到 Configuration Properties -> Linker -> Input,将 DLL_A.lib 添加到 Additional Dependencies。还将 ..\Release 添加到 General -> Additional Library Dependencies(类似地,在调试模式下添加 ..\Debug)。确保为 Debug 和 Release 版本修改它。

    2. 在解决方案中:你需要让用户依赖他们使用的库。

      在解决方案资源管理器中选择您的解决方案,按 Alt-Enter,转到 Common Properties -> Project Dependencies。对于 DLL_B 项目,请在“取决于”窗格中检查 DLL_A。

    这是基于VS2008的,但我相信在VS2010中应该是类似的。

    【讨论】:

    • 为了 DLL_B 的利益,我如何强制 DLL_A 发出 DLL_A.lib 文件?
    • 默认情况下应该这样做。 VS是什么?
    【解决方案2】:

    原来我忽略了源 DLL 项目(在项目创建向导中指定)上的“导出符号”设置。这将创建一个头文件,其 declspec 定义如下:

    #ifdef TESTFILTERS_EXPORTS
    #define TESTFILTERS_API __declspec(dllexport)
    #else
    #define TESTFILTERS_API __declspec(dllimport)
    #endif
    

    这是一个名为“TestFilters”的 DLL 项目。

    对于要导出的类定义,必须在类的头文件中使用 TESTFILTERS_API 定义,如下所示:

    class TESTFILTERS_API CTestFilters {...};
    

    在至少一个类定义中存在 declspec(dllexport) 会导致 lib 文件(即 TestFilters.lib)被自动创建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      相关资源
      最近更新 更多