关于VC2008+WIN7里面的Unicode影响的问题。

chenzhuo8804 2010-02-27 10:41:46
刚上手VC2008,本来用的是VC6.0 , 上手以后发现最大的问题就是Unicode了, 以前很多习惯的用法都被编译器报错。
先贴一段简单的代码
str.Format("%s\n",("Fibonacci sequence") );用的是Unicode 不是 Multibyte
这样的话系统就会报错 , 说
1>f:\mycode\testreadfile\testreadfile\testreadfile.cpp(15) : error C2664: “void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)”: 不能将参数 1 从“const char [4]”转换为“const wchar_t *”

改成str.Format("%s\n",_T("Fibonacci sequence") );
以后, 依然会报错,
把Unicode改成Multibyte以后才会通过。

现在想问的是怎么在Unicode的模式下把这个错误去掉..毕竟Unicode是主流, 每次都把Unicode关掉的话, 就太跟不上时代了...
...全文
386 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjdev 2010-02-28
  • 打赏
  • 举报
回复
使用字符串时,_T("string."),至于unicode支持,vc9是默认的.
如果要修改的话,在工程属性修改编码方式。
sjdev 2010-02-28
  • 打赏
  • 举报
回复
使用_T宏就好了.
ouxiguaiguai 2010-02-28
  • 打赏
  • 举报
回复
void CaaDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CString str;
CTime tm;
tm=CTime::GetCurrentTime();
str=tm.Format("现在时间是%Y年%m月%d日 %X");
SetDlgItemText(IDC_STATIC,str);
CDialog::OnTimer(nIDEvent);
}
同楼主问题,这个怎么改成unicode支持哦,郁闷奥~~~~
bcrun 2010-02-28
  • 打赏
  • 举报
回复
看来确实有很多人忽视了Format的第一个参数也是一字符串,也要控制编码
yhp1888 2010-02-28
  • 打赏
  • 举报
回复
还有,楼主还要学会认识编译器的错误提示信息。
yhp1888 2010-02-28
  • 打赏
  • 举报
回复
“刚上手VC2008,本来用的是VC6.0”
--VC6.0默认是ANSI,"%s\n"和_T("%s\n")这样的代码都是ANSI,所以不会出错。
--不管是VC6.0还是VS2008,在UNICOE下,都不认识"%s\n"了,因为"%s\n"是ANSI,不是UNICODE。

“改成str.Format("%s\n",_T("Fibonacci sequence") );以后, 依然会报错,把Unicode改成Multibyte以后才会通过。”
--改成str.Format(_T("%s\n"), _T("Fibonacci sequence") );在UNICOE下就不会报错了,注意:凡是有""的都是字符串!

--楼主的问题,从VC支持UNICODE开始,就是这样了,和操作系统无关。
yhp1888 2010-02-28
  • 打赏
  • 举报
回复
你读书时,如果是一个好老师教你,一定会反复强调:“编程风格,编程风格,要有好的编程风格,要培养自己良好的编程习惯”。

我不管在VC6下,还是EVC下,还是VS2008下,用字符串时,永远会加上_T()。98年VC6出来时我就有这个习惯,以后的代码移值很快,VC的代码转EVC几乎不用修改。

给字符串加上_T()/TEXT()/_L等,表示这个字符串同时支持ANSI和UNICODE。

比如字符串_T(“你好”),在UNICODE下,自动编译为wchar_t *;在ANSI下,自动编译为char *

没有“良好的编程风格”,会给你今后的编程带来很多小麻烦。尤其是在你代码移值的时候。

----楼主的问题,就是在UNICODE下使用了ANSI字符串!请给你的字符串加上_T()就没问题了。
----以后还要你自己养成良好的编程习惯。

副组长 2010-02-28
  • 打赏
  • 举报
回复
这个不是 Win7的问题,是VS2008,可以在项目里面不使用UNICDE,使用多字节。旧项目往过转更是这样,要不然需要改很多的字符串。
密斯刘 2010-02-27
  • 打赏
  • 举报
回复
Win7对Unicode应该没有什么影响吧
密斯刘 2010-02-27
  • 打赏
  • 举报
回复
楼主你没有看到错误报告说第一个参数不能转换吗?
改成str.Format(_T("%s\n"),_T("Fibonacci sequence"));

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧