写Native代码也有一周之余,写一点感触.
之前:
- 学习使用C#语言约4年(大学里面学了三年半),较为熟练使用C# 2.0
- TCPL,或者K&R C,看过两三遍(至少);C和指针,看过至少三遍
- TC++PL看过约一遍多(主要当工具书使)
- 略微了解C/C++语法(简单C++代码均能看懂)
- Programming Language看过几个月(一遍都没看完,因为是英文版),大约能了解Windows的工作模式
语法对于我来说不是问题,刚一开始,我就以自己的想法写除开UI的代码(我比较喜欢跟UI无关的东西).除开UI的代码编写还是比较简单,毕竟是应用,问题还不是很多;到了UI速度就慢了不知道多少倍……那一番艰辛用语言难以形容,看消息看的都快吐了(那已经不是心理上的,已经快成为物理上的了).
为此,还去用了MFC.说句心里话,我是非常非常不喜欢MFC,可是用Win32我解决不了那些复杂问题……
来一些问题总结吧:
1. 访问内存出错(Access Deny??)
应该是碰到最多的问题吧.其中一个记得最清楚的就是,我申请内存,在原有字符串的长度上面加上常数N,可是在写代码的时候却写成这样:
// wchar_t* _str=new wchar_t[wcslen(STR)+N];
wchar_t* _str=new wchar_t[sizeof(STR)+N];
问题的症状那是相当的奇怪,DEBUG的时候,Access出现的位置都是不固定的……我当时直接晕了,幸好有一个老的工程,可以运行,靠对比差异才发现问题的所在.
因为C#代码写习惯了,有一个坏毛病就是把自动变量返回……(可以通过new/delete来解决)
后面一篇MFC PropertySheet崩溃就是靠经验解决的.
2. 乱码
乱码出现过两种,一种是从文件里面读取出来的,另外一种是char和wchar_t转换出来的.
从文件里面读取出来的,我总结出,只要把文件编码改成默认,然后用wifstream读取出来的,就没乱码;
我比较喜欢STL(为此吃过不少苦头),在string find字符串的时候,手误写成了L’=’,然后,通过CA2T转换就变成了一堆????,虽然之前看到c_str还是正常的……
3. API设计
WinCE的API只支持wchar_t的,所以我总结经验,那就是,所有的API都设计成wchar_t,不要char的API,那样只会使问题更复杂,或者带来更多的问题.
4. 细心
C/C++的编译器给你能提供的信息比较有限,有时候还会产生一些莫名奇妙的提示……需要心细,总结经验
5. UI
关于这个UI,我实在是很无语,我本身不喜欢UI,可是做App没UI偏偏不行.单纯Win32做UI比较难一些,MFC/WTL能把问题稍微简化一些.可是要美观,就又把MFC/WTL打回原形……
曾经,我很期待WinCE 6.0 R3的XAML C++ API,如果使用那个,Win32的UI就很好搞了.可是偏偏WP 7砍掉了这个东西……
真不知道Win32这个UI怎么搞,同行可以告诉一下.
6. 调试
我看过我半年前写的代码,DEBUG(宏)时使用MessageBox来调试.现在MessageBox用的少了一些,主要靠编译器(汗)
以后可能需要Log和TDD来解决调试的问题,毕竟效率太低了
7. 虚心学习
一直在泡Devdiv论坛的WM版,在哪里居然发现N多的妖怪:
什么本科毕业工资有6K的人士,最关键的是,那还是10年的…
什么写程序有15年,这种人居然在国内也有
NB人士太多(还有一堆如大V,刀哥,tomcat…….)