关于VC2005 中的Character Set问题

最近在将一个以前的大项目从VC6升级到VC2005时,也就是VC8时,遇到了一个非常让人困惑的问题,那就是:

在vs2005新建一个sdi文档中的view里的ondraw函数不可以执行pDC->TextOut(5,5,"hello");该语句,编译无法通过。
但该升级的项目程序中包含有大量的类似于pDC->TextOut(x,y,"xxxx");的语句,确没有任何改动,而顺利通过编译。

这是为什么呢?

为了解决这个问题,我特意如下做了一个测试:

1、在vc6下创建了一个sdi文档的程序,并在view中的ondraw函数中增加pDC->TextOut(5,5,"hello");函数,编译运行测试,毫无疑问,是OK的。

2、将改程序直接用VS2005打开,自动升级完毕,ondraw函数中也没有任何改变,单击运行,OK,也是正常的。

3、在VC2005下创建了一个sdi文档的程序,并在view中的ondraw函数中增加以下语句:

pDC->TextOut(5,5,"hello");             //error  

pDC->TextOut(5,5,_T("hello"));      //ok

pDC->TextOut(5,5,L"hello");          //ok

编译运行测试,结果如注释部分所示。

 

通过一个下午的摸索,终于我自己也算是部分找到了答案:

 

VC8默认编译环境为unicode
vc6升级到vc8之后,其环境默认为Use Multi-Byte character set
字符集环境设置:menu->Project->Tmd Properties->Configuartions Properties->Character Set,该选项包含下面3种:
1、No Set
2、Use unicode character set     //必须加_T或L对“XXXX”字符串进行转换
3、Use Multi-Byte character set
如果是从升级过来的程序,无论选择1、2、3哪个选项:
pDC->TextOut(5,5,"hello");
均没有任何编译错误。不知道为什么对于选择2,编译器却没有做出错误提示,而是顺利通过???
但是下面的语句:
str.Format("%.2f",2.1);
则无法在选择2的情况下通过,其它1、3则OK。

如果是直接从vs2005创建的程序上面两个语句在选择2的情况下均无法通过编译,加_T("")或者L""之后才OK。如果选择1和3,则亦可以顺利编译通过并正确运行。


呵呵,如果各位高人有更好的答案,欢迎留言补充。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值