2

我在这里发布这个问题是因为我在尝试找到答案时遇到了很多麻烦 - 特别是 StackOverflow 上的所有答案都没有解决问题。

我最近升级了我的 Visual Studio 2010 32 位项目以编译 x64。编译没有问题,但在尝试启动应用程序时,它会失败,错误代码为 0xc000007b。通常当您忘记将包含的 DLL 从 32 位升级到 64 位并因此尝试在 64 位应用程序中加载 32 位代码时会发生这种情况,但在这种特殊情况下,我只包含 Windows 附带的 DLL,所以无论如何,WOW 应该选择正确的 DLL 版本……理论上。

ProcMon 表示所有 DLL 都是从 C:\Windows\System32 加载的,这是 64 位插件的正确位置。按照StackOverflow 线程中的建议使用 Dependency Walker也无济于事,因为它认为所有引用的 DLL 都是 32 位的,可能是因为 DW 本身是一个 32 位应用程序,所以当它要求例如 user32.dll 时,Windows 会选择 SysWOW64 文件夹中的版本。

4

1 回答 1

3

当使用清单在通用控件上启用视觉样式时,您一定不要忘记升级 x64 项目的清单文件。监督这个问题很容易,因为您可能只创建一次清单文件,然后再也不会碰它。

您的清单文件可能包含如下部分:

<assemblyIdentity
     type="win32"
     name="Microsoft.Windows.Common-Controls"
     version="6.0.0.0"
     publicKeyToken="6595b64144ccf1df"
     language="*"
     processorArchitecture="x86"/>

这使 Windows 搜索 32 位版本的通用控件。要解决此问题,您必须将清单文件中所有出现的 替换为,或简单地替换(以使其在所有平台上工作)。如果您不使用该版本,请不要忘记为项目的 64 位版本创建单独的清单。"x86""amd64""*""*"

于 2013-08-11T23:38:08.473 回答