[求助]代码在vc6.0 能运行vs2005报错

achang21 2010-09-19 09:51:05
大家帮我看个问题,在vc6.0下能正确运行,在vs2005运行报错.

部分代码如下
	int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];


GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);

GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);

num1=atoi(ch1);
num2=atoi(ch2);

num3=num1+num2;

itoa(num3,ch3,10);
GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);


运行报错:
1>------ 已启动生成: 项目: DialogTest, 配置: Debug Win32 ------
1>正在编译...
1>TestDlg.cpp
1>d:\c++\sunxin\ch07\dialogtest\dialogtest\testdlg.cpp(89) : error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LPTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>d:\c++\sunxin\ch07\dialogtest\dialogtest\testdlg.cpp(91) : error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LPTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>d:\c++\sunxin\ch07\dialogtest\dialogtest\testdlg.cpp(99) : error C2664: “CWnd::SetWindowTextW”: 不能将参数 1 从“char [10]”转换为“LPCTSTR”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>生成日志保存在“file://d:\C++\sunxin\ch07\DialogTest\DialogTest\Debug\BuildLog.htm”
1>DialogTest - 3 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========


希望大家帮我分析下原因,非常感激!
...全文
171 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
achang21 2010-09-19
  • 打赏
  • 举报
回复
非常感谢大家的慷慨帮助,像大家说的那样确实得用TCHAR,问题解决了,已经给分!再次感谢!
acdbxzyw 2010-09-19
  • 打赏
  • 举报
回复
TCHAR ch1[10],TCHAR [10],TCHAR [10];
lidaotong 2010-09-19
  • 打赏
  • 举报
回复
是ANSI和Unicode的问题,VS2005使用的Unicode编码。把char型改为TCHAR型,atoi改为_wtoi函数,GetWindowText改为GetWindowTextW
Eleven 2010-09-19
  • 打赏
  • 举报
回复
char ch1[10],ch2[10],ch3[10];
-->
TCHAR ch1[10],ch2[10],ch3[10];

guoxuqu 2010-09-19
  • 打赏
  • 举报
回复
看一下,是不是vs2005默认是unicode编码?如果是,把你原来的程序改成unicode的,把char替换成TCHAR.
  • 打赏
  • 举报
回复
都是宽字符惹的!!!

修改字符集为多字符集试试!!
zhangweiit 2010-09-19
  • 打赏
  • 举报
回复

因为,VC6默认是用mbcs,而vs2005用的是unicode
这个区别导致你的代码不能运行


GetWindowText
它有两个版本
GetWindowTextW
与GetWindowTextA

编译器已经提示你用的是GetWindowTextW版本,说明,你启用了Unicode
不过,问题不在于UNICODE,因为,关于ANSI与UNICODE字符,VC会用宏自动切换
所以,你只要坚持使用TCHAR,而不是用char
TCHAR,会根据宏,相应的转换为char或是wchar_t

拿你上面的代码来说
如果你把这一行:
char ch1[10],ch2[10],ch3[10];

换成
TCHAR ch1[10],ch2[10],ch3[10];

一般就可以运行了


zhangweiit 2010-09-19
  • 打赏
  • 举报
回复
字符串
最好用_T("xxx")包起来

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧