法开启MFC42.lib"
(推荐方法1)
1.如果主工程下用到了一些DLL,这些DLL 是在VC6.0下编出来的,我们需要这些DLL 也在VS2008重新编译。否则在Windows7 下编译主工程会有找不到MFC42.lib 等错误。
2. 选择静态链接MFC;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7.处理Manifest问题
VS2005,2008工程需要使用Manifest文件,记录“工程依赖项”。所以必须要生成Manifest文件。
设置:Project propert\ linker\ Manifest\ 生成清单:是。
Project propert\ linker\ Manifest Tool\ 嵌入清单:是。
(VC6.0 没有嵌入清单的功能。需要我们自己写出Manifest放入工程,然后编入工程资源中或者放入应用程序层。但是VS2005,2008有自动生成及嵌入清单的功能)
Manifest 文件还有一些功能: 1.设定
程序运行用户权限; 2. 支持Microsoft.Windows.Common-Controls.
1. 设定程序运行用户权限: 设置Project propert\ linker\ Manifest\ 启用用户帐户控制(UAC):是;
UAC 执行极别:asInvoker (默认值);
UAC 绕过UI保护:否;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
2.支持Microsoft.Windows.Common-Controls.
分几种情况:如果用VS2008 则在生成工程向导中,在“高级功能设定中”,勾选“公共控件清单”项。然后编译工程时按照上述方式选择“生成清单”。清单自动生成并包含支持Microsoft.Windows.Common-Controls.
如果创建工程时,没有设置此选项,我们可以后期在Project propert\ linker\ Manifest\ 附加清单依赖项:
添加type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df' language='*'
从VC6.0升级到VS2008的工程。因为VC6.0的Manifest文件是外部的。 VS2008默认是自动生成嵌入式Manifest.所以两个会发生冲突:
error : CVTRES : fatal error CVT110
0: duplicate resource. type:MANIFEST, name:2, language:0x0409
LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
(推荐解决方案3)
解决
方案:1. Project propert\ linker\ 启用增量链接:否;(关闭增量链接)
2. 设置工程属性->配置属性-> 清单工具->输入和输出->嵌入清单,选择[否]
3. 在工程的.rc文件里面删除了manifest块. 删除VC6.0外部Manifest文件。设置生成嵌入式清单,并在附加清单依赖项: Microsoft.Windows.Common-Controls。
(有什么时候删除VC6.0外部Manifest文件后,编译会出现
问题: 嵌入清单:否;编译。。
删除manifest块和VC6.0外部Manifest文件。编译。
嵌入清单:是;编译。
这个方法或许可以解决 “删除VC6.0外部Manifest文件问题”。不肯定,请多试。
)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
8.warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
这个问题是C语言里面某些函数的安全性检查通不过。消除Warning信息方法:
(1)按照编译器推荐的把函数改为安全的。例如:strcpy改为strcpy_s;itoa改为_itoa_s等等;
(2)或设置Project -> Properties -> Configuration Properties -> c/c++ -> Preprocessor -> Preprocessor Definitons里面添加 _CRT_SUCURE_NO_WARNINGS / _CRT_SUCURE_NO_DEPRECATE
/////////////////////////////////////////////////////////////////