已经开始使用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的好! 最后一个,国际化问题时时要注意,不然要吃亏幺。
|