12

我有一个文件foo.h,其中包含各种函数声明。所有这些功能都在一个文件中实现foo.dll。但是,当我包含 .h 文件并尝试使用任何函数时,我收到错误:

bar.obj : error LNK2019: unresolved external symbol SomeFunction

所以显然没有找到功能实现。

我必须做些什么来帮助编译器找到 DLL 中的定义并将它们与 .h 文件相关联?

我看过一些东西__declspec(dllexport)__declspec(dllimport)但我仍然不知道如何使用它们。

4

3 回答 3

14

您应该从 DLL 所有者那里收到至少三个文件。您在运行时需要的 DLL,带有导出函数声明的 .h 文件,您已经拥有了。还有一个 .lib 文件,即 DLL 的导入库。链接器需要它,因此它知道如何将函数添加到程序的导入表中。

您错过了告诉链接器它需要链接 .lib 文件的步骤。它需要添加到项目的链接器的 Input + Additional Dependencies 设置中。或者最容易通过在源代码中编写链接器指令来完成:

#include "foo.h"
#pragma comment(lib, "foo.lib")

这适用于 MSVC,否则不可移植,但链接永远不会。将 .lib 文件复制到您的项目目录或指定完整路径。

于 2013-02-26T14:04:23.557 回答
10

我只是有一个类似的问题。解决办法原来是 DLL 是 64 位的,而使用它的简单应用程序是 32。我忘记在配置管理器中将其更改为 x64。

于 2015-01-13T01:07:53.400 回答
3
  1. 构建dll时需要在函数定义前面指定__declspec(dllexport)关键字
  2. 您需要将 .dll 文件导入或加载到进程内存中。
  3. 您需要从该 dll 中获取要使用的函数的地址。

一些有用的开始链接:: MSDN Documentation , SO , Random

于 2013-02-26T14:02:06.833 回答