【问题标题】:C++ 32 bit application trying to use 64bit MFC DLLs尝试使用 64 位 MFC DLL 的 C++ 32 位应用程序
【发布时间】:2017-09-17 15:12:05
【问题描述】:

我正在将一个大型 C++ 应用程序从 Visual Studio 6 迁移到 VS2013。我已经构建了 exe 和 DLL。我已经解决了许多问题,并且能够启动该程序。程序启动后立即停止运行。使用 Dependency Walker 后,我认为问题在于我的 32 位 EXE 和 DLL 正在尝试使用 64 位版本的 MFC DLL。这是屏幕截图:

我的理解是 32 位应用程序应该自动使用位于 C:\Windows\SysWow64 目录中的 DLL;但这似乎并没有在这里发生。

我在项目设置中查看了一些可以解决此问题的明显内容,但我没有找到任何东西。我想知道你们中是否有人遇到过这个问题,如果有,你们是怎么解决的?

感谢您的帮助!

问候, 迈克

【问题讨论】:

  • DependencyWalker 曾经是一个值得信赖的工具,现在是时候了。今天,它经常被混淆。如果您的应用程序确实启动了,它就不能静态链接到具有错误位数的 DLL。不要相信 DependencyWalker。使用其他工具来诊断问题。
  • @IInspectable 什么工具?
  • 您可以使用 Process Monitor(从 Microsoft 免费下载)查看正在尝试加载的文件。如果您在调试器下运行,您可以看到模块列表中正在加载哪些文件。
  • @sergiol: Process Monitor 可用于跟踪,系统在哪里寻找 DLL,以及哪些。还有其他工具。不过,正如所解释的,我怀疑这是一个位不匹配的问题。

标签: c++ dll mfc 32bit-64bit 32-bit


【解决方案1】:

我要感谢 IInspectable 指出了 Process Monitor 的问题。我没有找到 PM 的特定替换工具,但我使用了 Visual Studio 的 Debug->Windows->Modules 对话框工具。我将调试器附加到可执行文件,我看到了这个:

这表明我最初的想法(我的 DLL 指向错误的系统目录)是不正确的。这是一种解脱!

当然,我在这个问题上又回到了原点,但至少我不会浪费时间追随红鲱鱼。

感谢大家的帮助!我很感激。

真诚地, 迈克

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2012-03-06
    • 2015-01-07
    • 1970-01-01
    相关资源
    最近更新 更多