MFC Unicode 编程中 MSVC6 和 MSVC 2008 的区别
Posted
技术标签:
【中文标题】MFC Unicode 编程中 MSVC6 和 MSVC 2008 的区别【英文标题】:Difference of MSVC6 and MSVC 2008 in MFC Unicode programming 【发布时间】:2011-08-24 05:01:51 【问题描述】:这是我的代码:
char cName[20] = 0;
int iSum = 0;
int k=0;
k=GetDlgItemText(IDC_EName,LPTSTR(cName),11);
k=_tcslen((wchar_t*)cName);
for(unsigned int i=0;i<=k;i++)
iSum+=cName[i]-1;
m_sSerial.Format(_T("%i"), iSum);
SetDlgItemText(IDC_ESerial, (LPCTSTR)m_sSerial);
我在 MSVC 6 和 MSVC 2008 中都试过了(当然是最近的这个) 但是
MSVC 6 reult = 308
and MSVC 2008 result =241.
input of both =MSVC
怎么了? 为什么我有 2 个不同的答案以及如何在 MSVC2008 中修复它?
【问题讨论】:
【参考方案1】:不要进行强制类型转换。删除所有LPTSTR
、LPCTSTR
、(wchar_t*)
类型转换。将cName
声明为:
TCHAR cName[20] = 0;
这将确保 cName
对于 Unicode 构建是 WCHAR
,对于 Unicode 构建调用 GetDlgItemTextW
,对于 MBCS 构建,cName
将是 char
,并且调用 GetDlgItemTextA
。
【讨论】:
以上是关于MFC Unicode 编程中 MSVC6 和 MSVC 2008 的区别的主要内容,如果未能解决你的问题,请参考以下文章
通过编写串口助手工具学习MFC过程——Unicode字符集的宽字符和多字节字符转换