一只菜鸟从C#转向cpp开发的两周过程 (WinMobile)
我是一名软件专业的学生,目前是最后一年,之前在学校学习的是C#&WinMobile专业,学了一年多,当然,可以视为桌面开发.但是个人学艺不精,现在开始实习,找到了一家很喜欢的软件公司,也是做Mobile平台开发,但是公司用的是cpp,完全抓狂!书到用时方恨少,艺到用时恨不精啊,正所谓自作孽不可活,冤冤相报何时了```好了,我不废话了,总之面临着个人感觉很严峻的考验,我智力一般,底子薄,很后悔在学校的时候没更刻苦一些,我的头头儿很厉害,可以说是那种偶像级的人物,他给了我一些小任务做做,看我能不能适应,第一个任务,是一个类似downloader的东西,要求有进度条,还要有速度显示,需求很简单,几句话说完,那么,下面我来说一下我这两周的经历,希望能对一些和我一样的同志们有所帮助.(我很啰嗦吧>_<)
先贴一下我第一周的小结
周一 开始进行WinMobile平台的native开发测试,但是完全找不到方向,一片混乱,大批没见过用法和类型都没见过,尝试了建几个不同类型的小项目,完全用不起来,更别提设计思路。查看了msdn上面的native开发介绍,并且翻阅了一本英文WinMobile开发手册,并且利用搜索引擎和在论坛交流,有了一点眉目,但是很不清晰,第一天完全被击败,抓狂!
周二 开始尝试接触MFC编程,然后发现了其与Win32编程紧密不可分割,概念上的东西清楚了些,初步可以确定利用Win32或者MFC项目来实现功能,同时在网上翻阅了大量资料,认真阅读了VC++入门经典中的Windows编程概念和MFC的相关知识,并且开始注意VC++与之前学习的C++的大量差异,从基本类型到各种习惯用法,一天下来收获很多,方向明确了些,同时找到了一些mobile的native开发相关资料,但是尝试建立项目仍然不成功,然后在经典教材的指导下从windows开始平台练习,查阅网上的例子,然后在WinMobile开发手册的帮助下实现了一个小例子,对mobile下的开发稍微熟悉了一些。
周三 概念上处于比较混乱的状态,大脑似乎陷入死循环,前一天接受的东西量比较大,消化不良,延续着周二的学习方式,尝试仿照网上的例子做试试,但是做着做着就乱了,再次进行不下去,再次陷入了泥沼
。
周四 查阅侯捷的关于MFC的书的时候受到了启发,”勿在浮沙筑高台”,再次调整方向,花费了将近三小时看了孙鑫关于MFC编程和Win32编程概念的课程视频,对于之前的东西消化效果好了很多。大概设计了程序的实现需要的步骤,认真阅读别人的例子,研究了WinMobile开发手册及msdn上面关于网络连接方面的API,虽然仍有不明白的地方,但是效果明显好于前面几天,当然这也和之前几天的积累分不开,研究的同时在一些论坛上面和别人交流,得到了一些宝贵的经验。这次建立的项目并没有作废。
周五 今日进展很不错,界面进一步完善,程序设计更加明朗,在中午的时候终于将程序的连接部分做好了,并做了一切测试验证。编写期间发生了很多问题,但是都一一克服下来,目前初步确立下一步的工作,进行网络传输和数据读写,但是现在网络传输部分考虑了HTTP和SOKECT,但是不知道哪种方式更好,在这里还没有一个全局观,手头也没有资料了,我现在在着重考虑,至于文件读写方面,我觉得倒不会多难,当然,是相对于网络传输部分来说,此外还有个任务,就是进度条的实现,目前有一些想法,当然,现在这三点中首要考虑的仍然是网络传输的问题。
这星期的学习中阅读了大量资料,受益匪浅,同时关注了别人的很多宝贵经验和理解看法,感慨良多,并且对于前面困难艰苦的程度也更能明白,当然对于以后可能更加严峻有了些心理准备,不过困难仍是要用来解决的,我更清楚了与网上众多高手间的差异,我会努力缩短差距,这是我目前除项目之外的第二目标,以上。
下面是我第二周的小结
周一 上周主要完成了拨号连接部分的程序,本周开始考虑数据传输部分,进度比预期的慢得许多。首先有一些体会,不熟悉MFC编程是一方面,而且目前的情况是由易入难,更多的是思维上的不习惯,感觉dotNet环境更偏向于人的设计思维,而VC++更偏向于面对机器的直接,不过确实感觉MFC更加详细强大,但是新的MFC库有向dotNet的设计思路靠拢的趋势,查找一些功能实现的时候发现,新出的API用起来更加简便。之前预计用socket通讯来完成数据传输部分,但是很快发现这个想法并不适合,首先socket通讯要求有配套服务端程序,更多的应用是属于端到端的应用,通用性受局限,并且查阅了资料,感觉用socket的话有些偏离主题,并且还要面临更多的未知问题。
周二 再次思考了一下,终于决定将目光转向之前不在意的HTTP应用,开始打算用 InternetConnect,HttpOpenRequest,HttpSendRequest的模式实现,在网上找到了一些桌面端的示例和资料,开始着手准备,之所以选择这个方式的原因是因为可以用HttpQueryInfo函数实现查询要获得的资源的大小问题,当然,后来发现了InternetOpenUrl更方便。用了一个网页试验了下,成功,但是换了一个网页又不行,开始有一些比较奇怪的问题,文件大小不能查询,连接不到,再次抓狂。后来发现,有的资源不能被下载,而有的资源不能查询大小。再此过程中学会了GetLastError的使用。
周三 通过理解的加深,发现Winnet类中更多的奥妙,InternetOpenUrl可以分解为 InternetConnect,HttpOpenRequest,HttpSendRequest,而竟然还存在一个 URLDownloadToFile
函数可以拆分为三个函数:InternetOpen,InternetOpenUrl和 InternetReadFile用来直接下载,听说有些木马下载器就是用这个函数做的,几句写完-——# 然后决定采用InternetOpenUrl来实现,做的还算顺利,另外对于制造缓冲来写文件有了一些印象,但是只是初步印象,不能够掌控自如。程序越做越明了,这是一个下载器,不知道别的下载器怎么判断文件名的,正则表达式么?此外对于之前做的网络连接部分有了更深的理解。
周四 今天主要是要完成进度条和速度显示,利用HttpQueryInfo函数的辅助很方便的实现了,用于计算速度的方法主要是依靠写入数据的速度来判断,这样比较真实。不过今天除了一个意外,几乎耗掉了一整个下午,就是double类型转换成CString的问题,用strSpeed。Format