Windows使用兩種字符集ANSI和UNICODE,前者就是通常使用的單字節方式,但這種方式處理象中文這樣的雙字節字符不方便,容易出現半個漢字的情況。而后者是雙字節方式,方便處理雙字節字符。Windows???NT的所有與字符有關的函數都提供兩種方式的版本,而Windows???9x只支持ANSI方式。_T一般同字常數相關,如_T("Hello")。如果你編譯一個程序為ANSI方式,_T實際不起任何作用。而如果編譯一個程序為UNICODE方式,則編譯器會把"Hello"字符串以UNICODE方式保存。_T和_L的區別在于,_L不管你是以什么方式編譯,一律以以UNICODE方式保存。
error實例:
if(bPlay)
{
pCmdUI->SetCheck(TRUE);
pCmdUI->SetText("停止");
}
else
{
pCmdUI->SetCheck(FALSE);
pCmdUI->SetText("播放");
}
}
生成出現:
error C2664: “CCmdUI::SetText”: 不能將參數 1 從“const char [5]”轉換為“LPCTSTR”
1> 與指向的類型無關;轉換要求 reinterpret_cast、C 樣式轉換或函數樣式轉換
?
改正后:
if(bPlay)
{
pCmdUI->SetCheck(TRUE);
pCmdUI->SetText(_T("停止")); //需要加_T
}
else
{
pCmdUI->SetCheck(FALSE);
pCmdUI->SetText(_T("播放"));
}
?
?
另疑問:
其實沒有_T(..)的代碼是從老師處下載,vc6.0版本
復制到vs中就出現問題 應該與初始化設置有關