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】:

不要进行强制类型转换。删除所有LPTSTRLPCTSTR(wchar_t*) 类型转换。将cName 声明为:

TCHAR cName[20] = 0;

这将确保 cName 对于 Unicode 构建是 WCHAR,对于 Unicode 构建调用 GetDlgItemTextW,对于 MBCS 构建,cName 将是 char,并且调用 GetDlgItemTextA

【讨论】:

以上是关于MFC Unicode 编程中 MSVC6 和 MSVC 2008 的区别的主要内容,如果未能解决你的问题,请参考以下文章

通过编写串口助手工具学习MFC过程——Unicode字符集的宽字符和多字节字符转换

VC的UNICODE 编程

MFC 丢失 Unicode 文本

关于VisualStudio2005中MFC通用控件的外观和使用Unicode工程的关系

MFC编程 -- 读取文件内容

Visual C++/MFC:让日文字符在没有 UNICODE 的情况下工作