将在VC6中编译好的工程放在VS2005中编译结果出现问题:
1: CString test;
2: test.Format("this is for test ");
就是上面这句代码
visual studio 2005\projects\vc6test\vc6test\vc6test.cpp(22) : error C2664: 'void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [18]' to 'const wchar_t *'
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC_DLL<wchar_t>
1> ]
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>生成日志保存在“file://d:\我的文档\Visual Studio 2005\Projects\vc6test\vc6test\Debug\BuildLog.htm”
网上查找解决办法由两个:
1: #include <tchar.h>
2: CString test;
3: test.Format(_T("this is for test "));
1>vc6test.cpp
1>生成日志保存在“file://d:\我的文档\Visual Studio 2005\Projects\vc6test\vc6test\Debug\BuildLog.htm”
1>vc6test - 0 个错误,0 个警告
这样就可以编译过去了,
第二种方法:
在VS2005的工程的属性页中找到,这个字符集 使用多字节字符集 ,同样也可以编译通过
1>正在删除项目“vc6test”(配置“Debug|Win32”)的中间文件和输出文件
1>正在编译...
1>stdafx.cpp
1>正在编译...
1>vc6test.cpp
1>正在编译资源...
1>正在编译资源清单...
1>正在链接...
1>LINK : 没有找到 D:\我的文档\Visual Studio 2005\Projects\vc6test\Debug\vc6test.exe 或上一个增量链接没有生成它;正在执行完全链接
1>正在嵌入清单...
1>生成日志保存在“file://d:\我的文档\Visual Studio 2005\Projects\vc6test\vc6test\Debug\BuildLog.htm”
1>vc6test - 0 个错误,0 个警告
========== 全部重新生成: 1 已成功, 0 已失败, 0 已跳过 ==========
具体的原因是:
VS2005默认采用的是UNICODE字符,这样英语字符是一个字母占用两个字节,而在vc6下采用的则是ANSI字节,一个英语字符占用一个字节,因此会出问题。