關於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,則亦可以順利編譯通過並正確運行。


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章