我有为Visual Studio 6.0 MFC编写的客户代码,它有一个简单的GUI,并启动一个带参数的EXE。此代码是大约2年前从VS6.0移植到VS2019的,并在几个系统上的生产环境中工作。我们现在有一个新系统,其中的代码无法正常工作...我开始挖掘。
代码在appcore.cpp第196行抛出异常,我有95%的把握这是由于重复的CWinApp示例。我的记忆是,当迁移MFC到Win10时,必须注意 *.h包含的顺序,这已经完成了...但我认为这里有一个类似的问题。
在程序崩溃的情况下,DLL以不同的顺序加载。
在下图中,我们有两个ASCII文件的Tortoise SVN Diff。一个是应用程序正常工作时的DLL加载顺序,位于左侧。第二个是应用程序无法正常工作时的DLL加载顺序,位于右侧。第7行是分歧,在失败的情况下,win32u.dll库在mfc140d.dll之前被拉入。
客户代码使用了一些Apache log4cxx库,我需要对此进行调查,但在加载序列中的这一点上,我不能100%确定在构建时使用的这些库或 *.h文件中的差异是否会影响DLL加载顺序。
这就是我要解决的难题。
我将包括一些链接到相关的StackOverflow问题,这是类似的,在我搜索这个问题的答案。
可能有用的链接:https://learn.microsoft.com/en-us/cpp/porting/porting-guide-mfc-scribble?view=msvc-170
1条答案
按热度按时间fwzugrvs1#
在不同位置按顺序搜索DLL:桌面应用程序的标准搜索顺序
很可能是故障机器上的DLL丢失或位置错误,因此Windows会抓取其他内容。
确保所有依赖项都安装在正确的文件夹中。