7174|17

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教:vc6.0移植到EVC,里面有很多的char报错,请问我应该怎么呢? [复制链接]

    各位大虾好!我将一个vc6.0的程序移植到EVC下,遇到了关于数据类型转换的问题。我是个新手,对于应该用什么样的数据类型和函数比较迷惑,希望各位大侠指教!
我是这样做的,不知道对不对:
    将VC的程序全部粘贴到EVC下,编译报错。第一个错误是CreateFile,说其中一个参数不能char[16],我将其改为TCHAR,结果其前面用到的sprintf报错,我又将其改为swprintf,报错其源字符串不能为char型。
我这样改下去对么?如果对,我这个程序里一共有1000多个char。有没有简单的方法?我想用typedef重新定义char,还不行,呵呵。
    希望各位大虾给于帮助,谢谢!

最新回复

呵呵,nbcool是版主哦,牛人的  详情 回复 发表于 2007-10-16 10:31
点赞 关注

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不要定义UNICODE
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
直接移植问题肯定不少的,还是老老实实的改吧,不要偷懒
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
谢谢sterry大侠。
我还不太明白,1.我去掉unicode以后就不出错了,这样就能够正确执行了么?
              2.如果我们可以不定义unicode而使用ascii,那么EVC为什么还要使用unicode呢?
呵呵,请原谅我的问题比较幼稚,我刚接触EVC,搞不明白一些个原理性的东西。谢谢啦
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

5
 
谢谢qfeng大侠,呵呵,其实我不是怕麻烦,就是不知道是不是这个有什么规则行的方法我不知道而傻改一气。
如果我改的话,是把所有的char都直接改为TCHAR还是遇到哪个错就改哪个。相应的还有别的东西要变化么?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 
http://tag.eeworld.net/Article/27709098-bdbe-433d-bd87-cb2bdb6398d6.html
看看这个吧
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
楼上提供的资料不错,学习,但对解决LZ眼前问题显的不怎么实际了
LZ看看char tchar定义
#ifdefine UNICODE
define TCHAR WCHAR
#else
define TCHAR char
另外LZ去看看MultiByteToWideChar和WideCharToMultiByte,用于字符串的在ANSI和UNICODE之间转换
你直接移植的话还是错哪改哪吧,个人愚见
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

8
 
谢谢qfeng大侠和lenux大侠的提示,我下午仔细研究了那篇文章和tchar的定义,获益匪浅,非常感谢!
我还迷糊的一点是:EVC中根本不能使用类似char类型和sprintf()函数等这样的东西吗?这些是属于ascii的吗?
我试验了一下定义了char类型的变量,没有报错,而且程序可以执行。是因为使用模拟器在intel的机器上运行的原因吗?
如果可以用,我是不是应该配套使用,比如char配sprintf,TCHAR配swprintf?
希望各位大侠予以指点。我现在这里加一些分数了,有帮助的最后一定给分!
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

9
 
呵呵,还不准加阿,改天结帖的时侯加吧
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

10
 
EVC究竟能不能使用类似char和sprintf()等的数据类型或函数呢?
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

11
 
不能,那些都是ANSI类型的
EVC要UNICODE类型
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

12
 
楼上的不对啊
可以使用类似 strcpy, sprintf等函数来处理char类型的字符串
这些都是字符串的函数是可以使用的。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

13
 
我介绍下吧 EVC支持 unicode 和 ansi 两种 CRT 函数,但是由于WinCE的环境造成很多系统API只支持unicode,所以一般都要用UNICODE宏,你去掉这个宏是不对的。

针对你新手的情况,比较快速的方法是应该利用你最熟悉的环境解决所有字符串问题,然后再移植到EVC。

1.打开VC6 的C++ 编译环境:定义 UNICODE,_UNICODE 两个宏,去掉_MBCS的宏,这样VC6就在UNICODE条件下编译,首先应该解决这里的所有问题。记得代码要加上include

2.遇到纯粹字符串处理时,可以不更改CRT函数,但是遇到系统的API,则是需要处理的。比如,CreateFile ,这是一个多次被重定义的API,你如果用_MBCS 它就变成了CreateFileA,这样你的字符串可以表示为("\\myfile.txt"),但是你现在换成了UNICODE,_UNICODE 环境,它就变成了CreateFileW,这时你就应该用TEXT("\\myfile.txt")来表示。

3.改成UNICODE版本后先调通VC6,再去移植。

这是一些基本要点。

 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

14
 
所谓的UNICODE就是宽字节,版主这个知道吗,就是一个普通的ANSI系统的字符都是用一个字节存储的,但是在WINCE下推荐用TCHAR,也就是2个字节存储一个字符,其实EVC是支持CHAR的,但是EVC的开发包很多API函数都是直接用TCHAR,而不是CHAR,所以你首先要做的就是把涉及到TCHAR的函数的char型数据全部换成tchar,由于体积大了一倍,所以最好是一个个改,有可能会有内存溢出的情况,如果当时没发现,到调试的时候再找,就要费很多的精力。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

15
 
evc 里全部使用unicode
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

16
 
非常感谢各位大虾,经过这几天的学习和讨论终于对EVC有个认识了。呵呵,各位说得对,还是一个一个地改为TCHAR好。衷心谢谢各位!
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

17
 
还是不让我加分,这是怎么回事?总是说我没有权限。是不是只要加分就是100分啊,我还没有100分。只好把这些分散了先,谢谢
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

18
 
呵呵,nbcool是版主哦,牛人的
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表