当前位置: 首页 > news >正文

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

相关文章:

  • centos7 firewalld防火墙
  • linux:ora-27054:nfs file system error
  • 山东省高速公路不停车收费建设项目灾备系统招标
  • Android -- 触摸Area对焦区域(更新)
  • 在CFileDialog对话框中添加控件
  • PLC控制器在污水处理市场的应用分析——多普康自动化制作
  • Windows 2008 部署服务之WDS安装及配置
  • uva 12730(期望经典)
  • 关于 WebWork 中Action 的prepare方法调用多次的问题
  • c# 工具
  • 珍惜眼前
  • 【三维偏序】【分块】bzoj3262 陌上花开
  • Windows 7 Tips! --透明缓存(transparent caching)技术
  • tkinter之文件对话框
  • 不抛弃,不放弃,香巴拉半途之旅
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • ➹使用webpack配置多页面应用(MPA)
  • css属性的继承、初识值、计算值、当前值、应用值
  • JavaScript中的对象个人分享
  • js
  • Koa2 之文件上传下载
  • LeetCode29.两数相除 JavaScript
  • Python进阶细节
  • SpiderData 2019年2月23日 DApp数据排行榜
  • XML已死 ?
  • 回顾2016
  • 三栏布局总结
  • 设计模式走一遍---观察者模式
  • 世界上最简单的无等待算法(getAndIncrement)
  • 算法-图和图算法
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​第20课 在Android Native开发中加入新的C++类
  • ​虚拟化系列介绍(十)
  • !$boo在php中什么意思,php前戏
  • #{} 和 ${}区别
  • #include<初见C语言之指针(5)>
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (1) caustics\
  • (javascript)再说document.body.scrollTop的使用问题
  • (八十八)VFL语言初步 - 实现布局
  • (理论篇)httpmoudle和httphandler一览
  • (四)图像的%2线性拉伸
  • (一) storm的集群安装与配置
  • (转)linux 命令大全
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .bat文件调用java类的main方法
  • .NET Core跨平台微服务学习资源
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • @JoinTable会自动删除关联表的数据
  • [\u4e00-\u9fa5] //匹配中文字符
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [ACTF2020 新生赛]Upload 1