3

我主要关心的是,我能够使用 VC++ 编写 C++ dll。现在 dll 出现在 Debug 文件夹中。

如何在其他 C++ 控制台应用程序中使用我的 DLL。如何添加引用或将 DLL 链接到应用程序。

另一点,在创建 DLL 时,VC++ 向导给了我三个选项:

  1. 空 DLL 项目
  2. 一个简单的 DLL 项目
  3. 导出一些符号的 DLL

现在根据CP的文章,我使用了第三个选项。(由于 MFC 应用程序使用了该 dll,因此无法跟踪,此时有些先进

我是否需要始终选择第三个选项?另外两个选项是什么意思?

4

4 回答 4

6

不完全确定您的问题是什么,但是:

您使用哪个选项并不重要,这只是向导为您做了什么的问题;如果您使用第三个选项,那么向导会在您的头文件中创建一个如下所示的位:

#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif

其工作方式是在 DLL 项目中 TEST_EXPORTS 在编译器选项中定义,因此 TEST_API 计算为 dllexport 从而告诉链接器导出这些符号。如果你在另一个项目中包含这个头文件,它会将 TEST_API 定义为 dllimport,它告诉编译器在运行时在 DLL 中链接到它。这种导出符号的#define 方法被广泛使用且易于阅读。

为了在 DLL 中调用函数/类,您需要通过以下两种方式之一导出符号:a) 使用 __declspec(dllexport) [这在几乎所有情况下似乎都是更方便的选项]或 b) 使用 .DEF 文件在你的项目中

还想提一下,您需要在解决方案中包含 DLL 项目以获取 .exe 文件或 DLL 编译生成的 .lib。

于 2010-08-26T07:36:41.403 回答
3

您可以使用“导出一些符号的 DLL”来了解如何构建 Dll 项目。一旦你理解了这一点,请使用“一个简单的 DLL 项目”。您可以更喜欢始终从“导出某些符号的 DLL”开始,然后更改向导生成的代码,用您自己的代码替换示例导出的类/函数/符号。

要从客户端项目引用 .Dll 项目,请将 .lib 文件添加到客户端项目链接器依赖项:项目 - 属性 - 链接器 - 输入 - 附加依赖项。为确保链接器可以找到 .lib 文件,请将放置 .lib 文件的目录添加到链接器目录列表中。这可以在两个地方完成:在客户端项目中本地(项目 - 属性 - 链接器 - 常规 - 附加库目录)和全局,用于所有 VC++ 项目(工具 - 选项 - VC++ 目录 - 库)。

最后一件事是确保 DLL 可以在运行时由客户端 .exe 加载。Dll 必须在当前目录、可执行目录、Windows、系统目录中,或者可以通过 PATH 变量获得。

于 2010-08-26T07:47:31.413 回答
2

如 Alex Farber 所述,可以通过将 DLL 指定为 Visual Studio 中控制台应用程序的项目设置中的依赖项来导入 DLL。您必须确保应用程序能够通过将 DLL 放置在 PATH 变量指定的任何位置来找到 DLL。您还可以使用 LoadLibrary 方法在应用程序中以编程方式加载 DLL(请参阅此处的文档http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx)并调用在 DLL 中导出的方法使用函数 GetProcAddress(请参阅http://msdn.microsoft.com/en-us/library/ms683212(VS.85).aspx)。

于 2010-08-26T10:44:35.477 回答
1

通过以下步骤设置两个项目。 http://msdn.microsoft.com/en-us/library/ms235636.aspx

在这些说明中,新项目将添加到包含 DLL 的同一解决方案中。在大多数情况下,情况可能并非如此。如果您有两个单独的项目要处理,请稍微更改上述过程,如下所示。

  1. 在 DLL 项目中,确保您已配置为创建 DLL 文件。为此,请单击解决方案资源管理器中的项目并转到属性。在配置属性 >> 常规下,将配置类型更改为“动态库 (.dll)”。现在,通过选择菜单栏上的 Build、Build Solution 来编译动态链接库。

  2. 创建链接中提到的其他项目和文件。要在应用程序中使用 dll,您必须引用它。为此,请添加从动态库创建的 lib 文件。lib 文件创建在与 dll 相同的文件夹中。如果在调试模式下使用 Visual Studio,它将在 Project>>Folder>>Debug 中。如果使用了发布模式,项目文件夹>>发布。要在应用程序中使用 lib 文件,请转到项目 >> 属性 >> 链接器 >> 输入 >> 附加依赖项并将 lib 文件的名称添加到列表中(在我的情况下为“AFR24x7.lib”)。

  3. 为确保链接器可以找到 .lib 文件,请将放置 .lib 文件的目录添加到链接器目录列表中。有两个地方可以做到这一点:在客户端项目中本地(项目>>属性>>链接器>>常规>>附加库目录)和全局,对于所有 VC++ 项目(工具>>选项>>VC++ 目录>>库)。

  4. 添加链接中提到的包含文件。

  5. 复制创建的 DLL 文件并将其粘贴到应用程序的发布和调试文件夹中(如果您同时使用它们)。

  6. 除了设置链接中给出的依赖项之外,完成其余步骤。

希望这会有所帮助。

于 2014-02-25T09:24:36.833 回答