• [WM]写了一周的Native代码的感受


    写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…….)

    /**********************************************************************
     * 机械教条主义
     *
     * From:          http://www.cnblogs.com/egmkang/
     * Email:          egmkang [at] outlook.com
     * Weibo:        http://weibo.com/egmkang
     * Github:       http://github.com/egmkang
     *
     **********************************************************************/

  • 相关阅读:
    Word添加论文引用标注
    从入门示例看ns2脚本的基本结构
    Linux下Socket编程
    c++中的枚举类型
    运算符重载的规则
    标志位处理
    mfc中从类名获取类运行时信息
    用自定义类声明全局变量的一种快捷方式
    基类的析构函数声明为virtual比较安全
    VC常用数据类型使用转换详解(摘)
  • 原文地址:https://www.cnblogs.com/egmkang/p/1705055.html
Copyright © 2020-2023  润新知