0

我需要在 MSVC 2010 的 win32 控制台应用程序项目中使用库libMPSSE.dll。编写代码后,我只是将 dll 复制到我的 .cpp 文件所在的文件夹中。我能够成功编译,但问题是我有链接错误:

libMPSSE.dll:致命错误 LNK1107:文件无效或损坏:无法在 0x308 处读取

真的是dll本身有问题还是dll路径有问题。我们如何将dll添加到项目中?

他们没有提供任何 .lib 文件。完整的代码在这里

4

2 回答 2

2

这些是链接到 DLL 的常用步骤:

  1. 在需要使用 DLL 中的函数的任何源文件中包含 DLL 的头文件。您通常需要确保构建环境的包含路径包含头文件的位置。在 IDE 中,您可以使用Additional Include Directories配置设置来执行此操作。
  2. 将 DLL 的 .lib 文件传递​​给链接器。在 IDE 中,您可以通过将 .lib 文件添加到Additional Dependencies设置来执行此操作。您通常需要将 .lib 文件的路径添加到Additional Library Directories设置。
  3. 完成后,您的程序应该可以编译和链接。要使其运行,您需要确保可以在运行时找到 DLL 本身。实现这一点的最简单方法是将其放在与可执行文件相同的目录中。

我的猜测是,查看您的错误消息,在第 2 步中您将 .dll 传递给链接器,而不是传递 .lib 文件。

于 2013-05-03T11:00:48.880 回答
1

如前所述,您不能直接使用 C 链接器链接到 .dll 文件。有可以加载 .dll 文件并向您返回函数指针的 win32 API。通常,.dll 文件与 .lib 文件一起包含为您完成此负担的代码,并提供 API .dll 文件公开。您只需要链接到这个 .lib 文件并将 .dll 文件放在创建的 .exe 文件附近。

特别是关于 libMPSSE,在其发行说明中说,您可以将提供的 .a 文件重命名为 .lib 文件以在 Visual Studio 中链接到它(项目属性->配置属性->链接器->输入)。我试过了,它按预期工作。

于 2013-08-20T11:17:59.140 回答