找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2172|回复: 0
打印 上一主题 下一主题
收起左侧

开发项目的准备工作 - 一个字,累

[复制链接]
跳转到指定楼层
楼主
ID:90014 发表于 2015-9-13 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      前面说了,因为工作的需求,几乎有一个多月了,每天都在看这些与USB,Windows 系统相关的资料。说起来微软的东西的最大好处就是资料齐全,你可以不用出门,就在MSDN上获得很多详细的技术资料说明。不过因为资料是E文的,而且每个都很长,链接巨多,不知道会有多少人能够耐心看下去。不管怎么说,就是看过了,也怕很快就会遗忘。因此上趁自己还有点印象,就把看到的内容记下来。要是以后再要用了,也好能够明白的快一点,不需要吃二次苦,受二次罪了。
先把MS的链接放在这里,要是有不确定的地方了,可以随时访问MS的东西。嘿嘿。
http://msdn.microsoft.com/en-us/library/ms791126.aspx
这是MSDN中有关设备的类的说明。
0. 我的学习目标
其实我的学习目标不是如何编写Windows系统下的设备驱动程序,因为我没有开发新的设备。我只是为了搞清楚在我的系统中,都有哪些设备;他们之间都是什么关系;设备的状态怎样;如何单独控制其中的一个或几个设备的启动/停止/卸载,或者单独控制使用某一个设备的特殊功能。能够达到这样的目的,这就够了。
学习的前提:在大学时读的专业不是计算机专业,计算机只是业余爱好,因此上,虽然从1991年工作以来就开始使用计算机,但编程水平一直限制在使用简单的BASIC语言的水平。1992年的时候,看到别人使用Turbo C 2.0,觉得很羡慕。那时就开始接触12张5'盘的Borland C++ 3.0,但是开始使用的是 Borland C++3.1。这是开始接触C/C++语言的开始。可惜的很,当时对于MS的C6/C7很反感,没有看到其MFC有什么特别的优势。但是到了1995年前后,开始接触到VC2.0,4.0,也是因为Borland C++4.0/4.5把我们给抛弃了。可惜错过了最佳的学习机会,当时的工作方向也有所转移,因此上对VC就没有深入了解下去,直到现在都是一知半解。
还好的是,Windows的底层设备驱动,大都不涉及到 VC++及MFC类库的事情,就凭借当时BC++3.1的那些基础,这个工作还是能够做下去的。只是一开始要完成一个简单的程序编译,都不是那么容易。这个另外找话题再说了。
1. 平台选择
为了便于最终应用的界面开发,我选择的目标程序语言是Visual BASIC 6.0这个开发平台。而为了便于理解Windows系统内部的操作过程,必须安装 VC++6.0/VS2005/VS2008这样的底层操作跟踪平台。因此我采用的是 Windows XP SP3中文版,VB6中文SP6 + VS2008SP1的平台,另外
安装的是Windows DDK 2600 + WDK R6001的DDK开发工具。这样,最终的系统中,只是采用部分Windows API就可以在VB6上实现想要的对于Windows 底层驱动的操作,而用户界面上,使用VB编写最为简单方便。
2. 技术瓶颈
不像Windows 系统的用户层API,对于操作Windows系统设备的API,在VB6中并没有给出可以参考的 API Viewer 或导入工具。或许MS认为既然要操作底层驱动,没有人会用VB这样的入门级语言去做的。因此上对于如何正确的使用 Windows API,如何自定义其中用到的数据结构及常数,是这个项目的第一个难点。
目前的 Windows 系统大部分都在内部采用了 Unicode 编码,而在系统的语言定义中,依然有多字节MDBS格式,在大部分API中,都会存在Unicode 和MDBS格式两种格式的API。必须选择正确的API才能取得正确的结果。这个问题在用VS2008重新编译用VC6编写的程序时尤为突出,明明看到输入了正确的参数,偏偏得到的结果是错的,就是看不到任何问题。通过对反汇编代码的跟踪发现,直接传递给API的Unicode必须经过转换后才能取得想要的结果。而对于VB6来说,问题刚好相反。VB6自身采用的是Unicode 格式,但是API返回的数据大部分是ASCIIZ的格式,不是VB想要的String类型,又必须经过另外的转换,才能够正确获得。对于字符串是这样还好,而对于很多数组类型的数据,则操作要格外小心了。
这个工作的开始1-2周,几乎全部是忙着这些基本的东西。没有其它办法,只能多看别人的编程资料,一个函数一个函数的调试,摸索Windows API在VB中如何使用的方法。只有一个字 - 累。
搞清楚了基本工具的关系,这个问题并没有顺利。因为从现有的资料来看,对于设备的操作方面的实践特别少,个别的例子都不够深入,只是示例以下的一种用法,但是其中的每个参数的
取值都是什么,能够得到什么样的结果,都是不得而知。在这几天的实践中,不知道试了多少中不同的组合,除了多少次错误。最终没有办法,还是回到基础上来 - 慢慢的看MS的设备开发资料。自己最怕的部分还是无法躲过去,没有捷径可以走。原来想着能够从别人的例子中找出自己想要的东西,凑到一起就算完事的想法,根本就行不通。这就成了这个工作越做越累得原因 - 本来想偷懒,没有想到要付出的更多。这也好了,不得不回头认真学习MS的资料了。其实在前1-2周的实践中,将有关USB的资料,也只有细细的拜读了。
从毕业参加工作到现在,已经很少这么样的投入看资料了。其它还好,只是晚上睡觉也后,满脑子还是怎么调用,怎么安排流程的问题。晚上睡不踏实,白天有时也难免不能精力集中了。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表