已经开始使用eVC了2天了,不由得感慨,微软还是太老了,做的东西不如以前啦。
由于对VC的熟悉,加之媒体到处宣传eVC用的MFC和VC的一样兼容,所以先在VC6下做好
程序,然后移植到eVC下编译,昨天下午一编译,简直气晕!所有使用CString的地方全
报错, strcpy,atoi,atof,全报错。仔细察看,原来是unicode的问题,eVC将CString编译
成Unicode格式,ANSI字符的函数strcpy等对CString不能转化成const char* 以及char*.
希望eVC将CString编译成ANSI字符,所以将编译的开关_UNICODE,UNICODE去掉,结果依旧。
简直头大!用#ifdefe UNICODE #error defined UNICODE#endif 插入stdafx.h中,
发现在#inlude afx.h文件中定义了宏UNICODE,继续跟踪,最后发现在wce.h头文件中直接定义,
也没有使用开关,看来这步路被封死了。想将CString换成其他类,比如CMyString,但是和界面
的接口已定义好,很多参数使用的CString,怎么办?已经晚上9点了,怎样早回家?最后决定将char
定义的数组全换成TCHAR, 将strcpy换成lstrcpy, atoi换成 _wtoi,可是atof死活找不到wtof
这个函数。上网上查询,没有找到,倒是确定windows ce只能用Unicode.哎!5年前自己一直这
样使用,没想到今天载到这个问题上,看来我是对嵌入式开发有误解,不是省内存的就好!
继续解决atof,我查阅帮助,f_crt是转换,但是没办法将款字符串转换成float,峰回路转,想起
sscanf可以将字符中的数据可格式化,用swscaf不就可以了吗!最后是Unicode转换成
ANSI字符,ANSI字符转换成Unicode的问题,终于找到MultiByteToWideChar和WideCharToMultiByte
两个函数解决。
通过这两天eVC的使用,有以下体会:
以后在任何平台尽量使用兼容的类型,如使用TCHAR,不要用char,用INT,不要用int.这样即使
在非windows平台,也可以使用typedef TCHAR char;来解决。
MFC的CString可以说是string类中最烂的一个,尽量不要使用。如果不使用CString,那使用什么?
eVC不支持STL,看来还是自己写一个String类代替CString的好!
最后一个,国际化问题时时要注意,不然要吃亏幺。