将DLL链接到DLL

时间:2012-06-20 20:35:15

标签: c++ dll header-files

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

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

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

其次,我如何指出新的DLL项目应该依赖于现有的lib文件?

代码编译得很好。我得到了未解决的外部因素。

2 个答案:

答案 0 :(得分:3)

  1. 在项目属性中:您必须在每个项目的属性中添加库引用 - 包括生成DLL的项目。

    假设项目DLL_B使用DLL_A。在Solution Explorer中选择DLL_B,按Alt-Enter,转到Configuration Properties - >链接器 - >输入,将DLL_A.lib添加到其他依赖项。同时添加.. \发布到常规 - >其他库依赖项(类似地,在调试模式下添加.. \ Debug)。确保为Debug和Release版本修改它。

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

    在Solution Explorer中选择您的解决方案,按Alt-Enter,转到Common Properties - >项目依赖性。对于DLL_B项目,请检查“取决于”窗格中的DLL_A。

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

答案 1 :(得分:1)

事实证明我省略了源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)自动创建。