从"hello world”到0xc000007b,System32与SysWow64

前几天下载了VS2019,建立了一个Hello world程序,结果在编辑x86程序弹出了0xc000007b这个错误,但是x64程序程序正常运行。相信应该不少同行都应该遇到这个问题,网上的大多数解决方案都是说Directx的问题,修复一下就好了,但其实一般都不Directx的问题。因为我是刚安装的VS2019,而且Directx运行库有没有问题,而且我发现使用x86,VS2019显示的调用路径去了C:\Windows\SysWOW64!而不是认为的C:\Windows\System32!x86不是32位程序吗?怎么会调用C:\Windows\SysWOW64这个路径,我很奇怪,于是上网查资料,发现2篇文章解决了我的困惑。

https://blogs.msdn.microsoft.com/tianlin/2011/10/26/syswow64/

https://www.cnblogs.com/hbccdf/p/dllchecktoolandsyswow64.html

别人总结了3点,我直接拿过来:

1.当操作系统运行在64位时,怎么才能保证已经存在的32位应用程序以为自己仍然运行在32位系统上呢?微软的解决方案是:Wow64,全称是32bit Windows On 64bit Windows(64位Windows上的32位Windows)。

你也可以这样理解,虽然整个系统是运行在64位模式,但如果一个应该程序是32位的,Windows会在64位的基础上,加载一个“32位的Windows”。这样,这个32位应用程序就以为自己是运行在32位的系统之上的。这就意味着,64位的Windows,不但带有64位操作系统应有的系统文件,还带有32位系统应有的系统文件。

2.SysWow64文件夹,是64位Windows,用来存放32位Windows系统文件的地方,而System32文件夹,是用来存放64位程序文件的地方。

3.当32位程序加载System32文件夹中的dll时,操作系统会自动映射到SysWow64文件夹中的对应的文件。

也就是说SysWow64是为了“欺骗”32位程序而建立的一个文件夹,为了32位程序能够运行在64位机器上面的一个解决方案,SysWow64就是为了运行32位程序而设计的!

这个结论与原来想法有着巨大区别!SysWow64并不是存放64位的dll,SysWow64是存放32位dll的地方,SysWow64并是不说放64位系统的dll,SysWow64这个文件夹与64位系统没有任何关系!SysWow64其实是在64位操作系统上面模拟一个32位操作系统而已,真正存放64位dll的文件夹是System32,至于为什么这样做,没有为什么就是这样的,所以SysWow64不是叫System64,SysWow64是存放32位dll的地方,不是存放64位dll的地方,真正存放系统dll和64位dll是System32这个文件夹,明白这个问题好办了。报0xc000007b这个错误就是因为VS2019在编译x86程序的时候,SysWow64文件夹里面找不到VS2019对应32位程序的运行库,所以说就把VS2019的msvc*.dll和vcruntime***.dll放入对应的文件夹即可。找到VS2019安装目录下的debug_nonredist\x64\Microsoft.VC142.DebugCRT和debug_nonredist\x86\Microsoft.VC142.DebugCRT这2个文件夹,把里面的dll分别拷入System32和SysWow64文件夹里面即可解决问题,注意别拷贝反了,System32是存放64程序调用的dll,SysWow64才是存放32位程序调用的dll!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值