您的位置:首页 > 其它

关于VC出现 0x0C150002 错误的原因以及解决方案

2014-12-08 12:43 597 查看
情景重现

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

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

悲剧的事情粗现了!程序在启动的时候弹出了
0x0c150002 的错误提示。起初我并不知道是什么原因,根据以往的经验应该是编译出了问题。于是我将所有的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会根据当前版本来决定使用哪一个,具体原理我还没有摸清楚,但估计是使用当前相匹配的程序集的最高版本进行链接。

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

当我发现这个问题的时候,以为是我编译选项出错了。而事实上,这个东西与静态编译选项什么的无关。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐