【问题标题】:Visual Studio C++ 3rd Party dll's prevent .exe from runningVisual Studio C++ 3rd Party dll 阻止 .exe 运行
【发布时间】:2015-11-04 11:26:17
【问题描述】:

我是 C++ 新手,我正在使用具有第 3 方 dll 的 SDK 在 Visual Studio 2010 中制作应用程序。我希望能够在其他计算机上运行这个程序,所以我查看了this 问题以确保我正确地包含它们(特别是 Laserallan 的答案)。然后我在发布模式下构建程序,它编译得很好。问题是,当我尝试运行示例发布文件夹中的 .exe 时,程序没有运行。不确定这些细节是否相关,但我的项目在静态库和多线程(MT)运行时库中使用 MFC。未启用增量链接。

我怀疑它与 dll 与 .exe 位于同一位置有关,因为如果我将其中一个移出示例发布文件夹,我会收到此错误:

我还在 SDK 的 API 中注意到了这一点。我不确定它是否相关:

“eBUS SDK 以 DLL 的形式提供。此时不提供静态库。即使提供了 DLL,仍然需要将您的应用程序与 DLL 的链接库链接。”

.exe 之前运行良好,只是在我尝试将 dll 与 exe 放在同一位置时,它才开始出现问题,尝试使其在其他计算机上运行以及重新安装 SDK 时。有人对它可能是什么有任何想法吗?在过去的两天里,它一直在困扰我。任何帮助将不胜感激。

【问题讨论】:

  • 你知道 SDK 是否试图通过 DLL 边界传递 CRT 类型吗?如果是这样,您需要动态链接到 MFC 和 CRT。
  • 抱歉,我不太擅长编程,但您能详细说明一下吗?如何动态链接到 MFC 和 CRT?
  • @BillyONeal 此外,当我从与 .exe 相同的位置删除 dll 时,程序运行良好。但是,如果我需要将 dll 传输到另一台计算机以使程序运行,这不是很有帮助
  • 基本上,如果要跨 DLL 边界传递 CRT 对象,每个 DLL 都需要使用相同的编译器和 C 运行时库构建。看起来您所依赖的 DLL 是针对不同版本的 MFC 或使用与您正在使用的编译器不同的编译器编译的。 (我猜)
  • 评估第 3 方 DLL 交易的类型的一种方法是检查头文件。如果使用了 MFC 或其他非原始类型,您将必须完全匹配构建环境(并且可能永远不要再次使用该第 3 方,因为那是糟糕的设计)。评估第三方 DLL 所依赖的库 (DLL) 的一种方法是使用dumpbin /IMPORTS <dll-name>

标签: c++ visual-studio-2010 dll entry-point


【解决方案1】:

我解决了,原来新电脑有两个版本的 PvBuffer,一个有 GetAcquiredSize 方法,另一个没有。该程序正在执行不存在的版本,并试图找到不存在的方法。感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-27
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2017-12-31
    相关资源
    最近更新 更多