vc 0xc0000005_0xc0000142的解决方法

(5) 2024-06-12 17:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
vc 0xc0000005_0xc0000142的解决方法,希望能够帮助你!!!。

情景重现


        2013年7月29日,我在Windows 7 x86 SP1中文专业版系统环境下使用Visual Studio 2005 SP1中文版编写应用程序。



        编写完成后在Windows 7 x64 英文旗舰版系统环境下运行。


        悲剧的事情粗现了!程序在启动的时候弹出了 0x0c 的错误提示。起初我并不知道是什么原因,根据以往的经验应该是编译出了问题。于是我将所有的dll与exe都用MT编译选项编译成了静态的模块。


        结果运行时还是悲剧。


        接下来查看Windows系统日志,发现程序运行时出现了SideBySide错误。









        这里简单的介绍一下VC库的链接原理:


        每一个VC库分为CRT、ATL、MFC等等,微软称之为“程序集”。通常情况下我们使用的是CRT库。那么CRT库其实也是有版本之分的。


        以VC2005来看,它的CRT库分别有8.0.50727.42、8.0.50727.762、8.0.50727.1833、8.0.50727.4027、8.0.50727.4053、8.0.50727.4927、8.0.50727.4940、8.0.50727.6159这几个版本。


        我们在实际的编译链接过程中VS会根据当前版本来决定使用哪一个,具体原理我还没有摸清楚,但估计是使用当前相匹配的程序集的最高版本进行链接。



        那么这个程序在拿到其他计算机运行时,计算机根据其清单中的程序集版本寻找相应的库进行匹配,如果找不到就会反馈0x0c的SideBySide错误。






        当我发现这个问题的时候,以为是我编译选项出错了。而事实上,这个东西与静态编译选项什么的无关。今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复