eVC++就是eVC++啊
生活随笔
收集整理的這篇文章主要介紹了
eVC++就是eVC++啊
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在VC++6.0正常的一段代碼:
void?CMessageboxView::OnLButtonDown(UINT?nFlags,?CPoint?point)?{
????MessageBox("LButtonDown");
????//?TODO:?Add?your?message?handler?code?here?and/or?call?default
????CView::OnLButtonDown(nFlags,?point);
}
在eVC++4.0中編譯錯誤:
error?C2664:?'MessageBoxW'?:?cannot?convert?parameter?1?from?'char?[4]'?to?'const?unsigned?short?*'
????????Types?pointed?to?are?unrelated;?conversion?requires?reinterpret_cast,?C-style?cast?or?function-style?cast
Error?executing?cl.exe.
?于是進行顯式類型轉換,改為MessageBox((LPCTSTR)"LButtonDown");
成功地彈出了消息框,但是里面地文字是亂碼.但是這段代碼在VC++6.0中是完全正常的.
如圖:
于是改用如下代碼:
void?CMessageboxView::OnLButtonDown(UINT?nFlags,?CPoint?point)?
{
????CString?myStr="LButtonDown";
????MessageBox((LPCTSTR)myStr);
????//?TODO:?Add?your?message?handler?code?here?and/or?call?default
????CView::OnLButtonDown(nFlags,?point);
} 亂碼沒有了:
問了一下wangxz,他說應該用MessageBox(_T("LBUTTONDOWN"));?,即加入一個_T宏,用來把ANSI字符串轉換為 UniCode.因為Wince只支持UNICODE,因此調用API時要使用寬字符串。(LPCTSTR)"LBUTTONDOWN"中字符串本身仍然是ANSI字符串,前面加強制轉換并沒有解決問題。_T是在TCHAR.H中定義的一個宏,它會根據你編譯環境中UNICODE宏的設置來確定是將后面的字符串編譯成ANSI的還是UNICODE的
在VC下,由于PC上的Windows系統同時支持ANSI和UNICODE,所以可以用,但如果你在編譯環境中定義了UNICODE宏,也會出現問題。
而定義一個CString中間變量的辦法之所以可以用是因為CString重載了(LPCTSTR)這個強制轉換運算符,這樣就由CString完成了從ANSI字符串向UNICODE字符串的轉換。
轉載于:https://www.cnblogs.com/blaze/archive/2006/06/23/433846.html
總結
以上是生活随笔為你收集整理的eVC++就是eVC++啊的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用VS2003创建WEB程序的时候出现
- 下一篇: jsp自定义标签(taglib)编写的原