尝试使用 64 位 MFC DLL 的 C++ 32 位应用程序

Posted

技术标签:

【中文标题】尝试使用 64 位 MFC DLL 的 C++ 32 位应用程序【英文标题】:C++ 32 bit application trying to use 64bit MFC DLLs 【发布时间】: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,以及哪些。还有其他工具。不过,正如所解释的,我怀疑这是一个位不匹配的问题。 见***.com/q/14157885/383779和***.com/questions/43119204/…的第4点 【参考方案1】:

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

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

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

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

真诚地, 迈克

【讨论】:

以上是关于尝试使用 64 位 MFC DLL 的 C++ 32 位应用程序的主要内容,如果未能解决你的问题,请参考以下文章

mfc100u.dll下载和使用方法

在 64 位机器上注册 C++ DLL

Visual Studio 上 .NET 的 QUICKFIX 64 位构建(.NET C++ DLL Wrapper)

将非托管 C++ dll 添加到托管 C++ dll

无法在其他机器上注册 C++ MFC dll

MFC120u.dll“丢失”