平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

VS2005以后的DLL运行时库发布问题

从VS2005开始,M$发明了一种高科技手段的来加载各种版本的ATL,MFC,CRT,C++标准库CRT的DLL运行库,以解决DLL Hell问题,那就是manifest文件.
我个人认为没有比这更SB的DLL发布方式了,问题更加严重了.

于是出现了更多的VS2005编译出的程序不能在某些机器上运行的情况,因为msvcrt80.dll就有若干不兼容的小版本,如:
8.0.50608.0/8.0.50727.42/8.0.50727.163/8.0.50727.762(VS80sp1)/8.0.50727.1433等等,这些安装在Windows\WinSxS (WinSex?)对于一个使用各种第三方的没有源代码的lib的程序,每个第三方库对应的msvcrt80版本都不能漏装,关键是你到哪里去找这些版本的Debug版的DLL.

众人纷纷讨论解决该问题的技巧和心得体会,大部分人使用静态联编了事,惹不起我还躲不起吗.而我至今没有发现一种简单可靠的发布绿色版的使用动态运行时库Vs2005程序的方法,而且我不喜欢静态联编,所以我坚持VC6和Vs2003.

VS2005肯定是要生成manifest资源的,唯一能指定的是:这个manifest资源是作为执行文件的资源数据内嵌,还是生成为一个独立的文件.
工程属性 -> 配置属性 -> 清单工具 -> 输入与输出 -> 嵌入清单 -> 是/否.
如果,生成为一个独立的文件,再删除这个文件,运行程序会报错,"由于应用程序配置不正确,未能启动此应用程序。请查看清单文件查找可能的错误。".
就是说,想用VS2005以上的运行库,就必须有manifest资源,不管是内嵌还是独立文件.

posted on 2008-07-12 18:30 linghuye 阅读(5041) 评论(2)  编辑 收藏 引用 所属分类: 编程札记

评论

# re: VS2005以后的DLL运行时库发布问题  回复  更多评论   

抱歉在这里提问题,是怕前辈看不到,
看了前辈的一篇博文,说的是左右手坐标系的转换,
请问前辈是否能给出个具体的方法?我现在要移植一个GL的程序到DX,只是把
D3DXMatrixPerspectiveFovLH和D3DXMatrixLookAtLH改成了RH,但是程序完全混乱了,摄像机移动不对了,物体旋转不对了。。位置似乎也不对了。。。请指教
2008-07-15 23:19 | G_G

# re: VS2005以后的DLL运行时库发布问题  回复  更多评论   

“由于应用程序配置不正确,未能启动此应用程序。”(好像没“请查看清单文件查找可能的错误。”这句)
前阵子也被这个东东搞的莫名其妙,然后用Depends看了下所有用到的dll,最后拷了“Microsoft.VC80.CRT.manifest”“msvcm80.dll”“msvcp80.dll”“msvcr80.dll”4个文件来才搞定,一直没去研究这几个东东做什么用,今天总算知道鸟^_^
2008-07-30 15:56 | 阿冈
只有注册用户登录后才能发表评论。