VLD-添加到vs2008后,发生“程序无法运行”错误

    本人在项目中使用VLD检查内存泄露问题,但是有时候能正常添加到项目中并且项目能正常运行,但是也有很多次添加到项目中之后项目无法启动,出现“应用程序正常启动失败(0xc0150002) ” 错误,在系统的管理的事件查看器中也没有关于该错误的提示信息,经过查阅网络资源,发现不少网友也出现该情况,但是所有的解决办法都不能解决,最后经过多方英文文档查询,发现问题引起的原因如下:

VC2003、VC2005、VC2008及其后续版本,对底层最基本的CRT、MFC、ATL库都进行了重构为了避免不同版本的库引起冲突,重构后的库文件一般放在C://windows/WinSxS 文件夹中,并用特定的文件夹/文件名称进行标识; 与VC6不同, VC2003、VC2005、VC2008及其后续版本,引入了manifest清单的概念,即应用程序编译后会同时生成对应的.manifest文件,并将该.manifest文件作为资源编译到dll或者exe中去。.manifest文件实际上是一个XML格式的文本文件,里面记录了dll或exe中要引用的CRT、MFC、ATL库的版本和名称。VC6编译的应用程序对CRT、MFC、ATL的dll都是直接调用,而VC2003、VC2005、VC2008编译的程序都是先查询编译到资源中的manifest中的记录然后按照记录提供的版本和名称去搜寻对应的CRT、MFC、ATL库以及随库发布的.manifest文件,搜寻的路径包括当前目录、C://windows/WinSxS等等,如果没有找到对应的库文件,则提示“应用程序正常初始化失败”。
 
 
    这两篇有解决办法,就是把VLD中的这两个复制到执行文件夹下就正常了(bin目录下所有资源清单文件和dll)
Microsoft.VC90.CRT.manifest
Microsoft.DTfW.DHL.manifest

    

你可能感兴趣的:(内存泄露)