【问题标题】:What is the correct way to add .dll file in a MSVC 2010 project在 MSVC 2010 项目中添加 .dll 文件的正确方法是什么
【发布时间】:2013-05-03 09:02:03
【问题描述】:

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

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

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

他们没有提供任何 .lib 文件。完整代码为here

【问题讨论】:

  • 我按照此链接中的说明进行操作(在 Using post-build events 下),但仍然遇到同样的错误

标签: c dll visual-studio-2010


【解决方案1】:

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

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

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

【讨论】:

  • 供应商没有给我任何 .lib 文件,只有一个 dll 和一个 .a 文件
  • 好吧,和供应商谈谈。我认为 .a 通常是一个静态库。您希望导入库(通常带有 .lib 扩展名)链接到 DLL。
  • 这是链接ftdichip.com/Support/SoftwareExamples/MPSSE/LibMPSSE-SPI/…:他们没有提供任何..lib 文件
  • 您询问了如何链接到 DLL。我告诉你怎么做。我解释了为什么您会看到该错误消息。由于您没有 .lib 文件,因此您的问题变成“如何链接到没有 .lib 文件的 DLL?”这是您应该问的下一个问题。
  • FTDI 是一家严重搞砸的公司。不知道他们对他们的软件工程师做了什么,听起来就像他们把他们锁在地下室里,偶尔向他们扔食物来让他们活着。聪明的人似乎确实设法逃脱了。提供的 .a 文件实际上是一个 .lib 文件。改名就行了期待更多的痛苦。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2011-08-31
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多