




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章WindowsCE应用程序设计7.1WindowsCE应用程序开发简介7.2WindowsCE系统的开发工具7.3WindowsCE应用程序开发流程7.4WindowsCE应用程序接口7.5开发WindowsCE应用程序的注意事项7.6基于VS2005的应用程序开发简例7.7本章小结
在WindowsCE下,应用程序开发(ApplicationDevelopment)是针对驱动和内核而言的。应用程序开发是指针对给定的WindowsCE平台,利用该平台提供的编程接口(API),使用特定工具(如VisualStudio.NET2003、eMbeddedVisualC++或PlatformBuilder5.0),实现特定功能的程序设计活动。7.1WindowsCE应用程序开发简介这里需要指出的是,对于特定的平台,结合图7.1所示的WindowsCE体系结构,可知应用程序处于整个WindowsCE体系结构的最上层,应用程序直接与操作系统交互。因为WindowsCE是一个可高度定制的操作系统,因此基于WindowsCE平台提供的API可能会不同。
图7.1WindowsCE体系结构对于WindowsCE的编程接口,在WindowsCE设计之初,微软就决定对桌面Windows和WindowsCE采用几乎一样的编程接口。这样做一方面可使Windows下的应用开发人员快速、平滑地过渡到WindowsCE平台下,另一方面有利于大量现有的桌面Windows下的应用程序移植到WindowsCE平台下。而平台的价值是依赖于运行在其上的应用程序的,这也是我们选择WindowsCE平台的主要原因。
为了使读者能对WindowsCE系统的开发有一个全面而快速的了解,下面将对WindowsCE系统的开发内容、开发工具、开发流程与开发方法进行介绍。
WindowsCE系统开发本质上属于嵌入式系统开发,而嵌入式系统是由硬件和软件组成的,所以一个完整的WindowsCE系统开发也是由硬件开发和软件开发两部分组成的。WindowsCE是一个嵌入式操作系统,它本身是软件,但它必须在特定的硬件上面才能运行,BootLoader、OAL、驱动程序等操作系统软件都直接与硬件打交道,而绝大多数应用程序则不直接与硬件打交道。
本章的主要内容是介绍与WindowsCE有关的软件开发,并将与WindowsCE相关的软件开发划分为与硬件直接相关的软件开发、与硬件间接相关的软件开发和与硬件无关的纯软件开发。其中,应用程序的开发是本章讲述的重点。表7.1给出了WindowsCE系统的开发内容。
表7.1WindowsCE系统的开发内容应用程序开发是WindowsCE系统开发最重要的部分,但对于开发者来说也是难度最小的部分。一个嵌入式系统或嵌入式产品之所以区别于其他嵌入式系统或者产品,其关键就在于其应用的不同,两个不同的嵌入式系统或者嵌入式产品,它们的硬件可以完全相同,操作系统定制也可以完全相同,但其应用绝对应该不同。应用程序开发多数情况下是与硬件无关的纯软件开发,对开发者来说没有硬件方面的水平要求,与BSP开发相比,难度自然降低了很多。随着所要开发的嵌入式系统或嵌入式产品的不同,所要开发的应用程序也多种多样,开发者既可以开发没有任何显示界面的通信程序,也可以开发具有完整Windows界面的图形应用程序,开发什么样的程序完全取决于应用的需要。微软为开发者提供了丰富的WindowsCE应用程序开发工具,使开发者既可以使用C/C++语言开发本地(Native)应用程序,也可以使用C#.NET或VisualBasic.NET语言开发托管的(Managed)应用程序。
7.2.1WindowsCE系统的开发工具概要
从WindowsCE1.0开始,微软就为在WindowsCE下开发应用程序提供了完备的操作系统开发工具和应用程序开发工具,并随着系统版本的不断升级,开发工具也不断升级和完善,功能越来越强大,易用性越来越好。7.2WindowsCE系统的开发工具在WindowsCE4.X上,微软为应用程序的开发人员提供了三种开发工具:VisualStudio.NET2003用来开发基于.NETCompactFramework的托管C++代码;eMbeddedVisualC++和PlatformBuilder4.X用来开发本机代码;此外,还有EmbeddedVisualTools3.0(不提倡,已被废弃,这里不做讨论)。
在WindowsCE5.X中,仍可使用PlatformBuilder5.X进行应用程序的开发,最大的变化是eMbeddedVisualC++的作用已经被VisualStudio2005替代。VisualStudio2005既可用来开发基于.NETCompactFramework2.X的托管代码,也可以用来开发本机代码。因为PlatformBuilder的最大作用是用来定制内核,所以应用程序开发完全可通过VisualStudio2005完成。随着最新的WindowseMbeddedCE6.0的逐步推广应用,未来将是VisualStudio2005或其后续版本一统天下。因而WindowsCE的产品线就更加明晰了:纯应用程序开发采用VisualStudio;内核定制采用PlatformBuilder。WindowsCE.net下的应用开发模型如图7.2所示。
图7.2WindowsCE5.X下的应用开发模型本书中会涉及3种应用程序的开发工具:eMbeddedVisualC++、VisualStudio2005和PlatformBuilder。表7.2对WindowsCE5.X之后的WindowsCE操作系统开发工具和应用程序开发工具进行了总结。
表7.2WindowsCE开发工具总结在介绍每种开发工具的功能和使用方法之前,首先须意识到这些软件在安装过程中其实是有先后顺序的,即各软件之间存在着相互依赖的关系,否则安装过程中会导致出错或者无法安装。图7.3描述了各软件之间的相互依赖关系。其中,虚线代表部分依赖,实线代表全部依赖,依赖关系从下至上。
图7.3各软件之间的依赖关系7.2.2使用EVC开发应用程序
eMbeddedVisualC++(简称EVC)是专门用来开发基于WindowsCE的本机应用程序的工具。由于嵌入式系统资源有限,因此选用效率高、性能好、编译出的应用程序结构紧凑的C++作为编译器。EVC的最新版本为4.0,可为WindowsCE4.X和WindowsCE5.X开发应用程序。
从此工具的名字上就可以看出,eMbeddedVisualC++和桌面VisualC++关系密切。的确,它与VisualC++6.0(简称VC6.0)具有相似的工程管理模式和用户界面,连一些快捷键都是一样的。熟悉VC6.0的读者可很快上手。eMbeddedVisualC++4.0集成开发环境如图7.4所示。
图7.4eMbeddedVisualC++4.0集成开发环境从图7.4中可以看出,eMbeddedVisualC++支持WinCEApp/DLL/COM/Lib使用Win32API、MFC、ATL和STL,并且与桌面VisualC++的功能基本相同。这也是WindowsCE嵌入式操作系统占据优势并迅速成功的重要条件。所以如果熟悉Windows环境下的编程,再掌握WindowsCE编程的特点,很快就会进入WindowsCE编程的世界。对于开发人员来说,EVC易于调试和测试,当然,如果想要开发相应的应用程序,则至少需要安装一个SDK,默认eMbeddedVisualC++
会带有微软提供的StandardSDK。7.2.3使用VisualStudio2005开发应用程序
VisualStudio2005是微软于2005年推出的集成开发环境,是VisualStudio.NET2003的后续产品。对于嵌入式开发者来说,VisualStudio2005与VisualStudio.NET2003最大的区别是增加了本机代码的开发,以及对
.NETCompactFramework2.0的支持。因此,如果希望在WindowsCE下开发应用程序,那么建议使用VisualStudio2005。VisualStudio中的“新建项目”对话框如图7.5所示。在VisualStudio2005中,IDE强化了对图形界面设计的支持。开发人员可以所见即所得的方式设计PocketPC和Smartphone的应用程序,这样避免了以前在IDE中无法知道目标设备的确切分辨率而导致的图形界面问题。
在VisualStudio2005中,所有的WindowsCE模拟器都是基于ARMV4体系结构的。这对于开发PocketPC和Smartphone的应用程序来说有非常重要的意义,因为现在市场上所有的PocketPC和Smartphone设备的CPU都是清一色的ARM处理器。这样,在模拟器下运行的代码,无须重新编译,即可在真实的PocketPC和Smartphone上运行。
图7.5VisualStudio中的“新建项目”对话框7.2.4使用PlatformBuilder开发应用程序
PlatformBuilder(PB)是微软为开发人员进行基于WindowsCE平台的嵌入式操作系统的开发而定制的集成开发环境。在WindowsCE6.0操作系统开发和应用开发都统一到了VS2005环境。PlatformBuilder提供了所有进行设计、创建、编译、测试和调试WindowsCE操作系统平台的工具。它运行在桌面Windows下,开发人员可以通过交互式的环境来设计和定制内核、选择系统特性,然后进行编译和调试。同时,开发人员还可以利用PlatformBuilder6.0来进行驱动程序开发和应用程序项目开发,等等。PlatformBuilder6.0的强大功能,已使其成为WindowsCE平台下嵌入式操作系统开发和定制的必备工具。在PlatformBuilder中选择File→NewProjectorFile命令可打开“新建项目”对话框,如图7.6所示。
图7.6“新建项目”对话框使用PlatformBuilder的优点是显而易见的:它支持WinCEApp/DLL/Lib,使用Win32API开发,应用程序将被链接到OS内核中,这样做的好处是容易调试OS内核,可以把应用程序直接集成到操作系统映像中,使应用程序与操作系统一起发布,这样就避免了应用程序的安装部署。但是同时也带来了一些问题:
(1)一旦修改了代码,必须重新编译镜像。
(2)上述做法虽然容易调试OS内核,但是却不容易调试应用程序。主要表现在首先必须创建一个debug版的OS,然后才能DebugZone。7.2.5各种开发工具的比较
至此,已经详细介绍了4种应用程序的开发工具:eMbeddedVisualC++、VisualStudio.NET2003、VisualStudio2005和PlatformBuilder。至于如何选择开发工具,可以参考表7.3。
表7.3几种开发工具对比一般来说,使用eMbeddedVisualC++
开发本机码。当效能和控制是应用程序的最大需求时,开发工程师应使用EmbeddedVisualC++
开发本机码应用程序。选择本机码或是托管代码来开发应用程序,牵涉到的选择非常广泛,还包括开发工具、平台支持、应用程序需求及应用领域、开发者习惯、共享及时效性等。
WindowsCE系统的开发大致可以分为三个阶段:硬件开发阶段、操作系统开发阶段和应用程序开发阶段。硬件开发阶段的开发包括硬件设计开发、BootLoader开发、OAL开发和BSP开发;操作系统设计阶段的开发包括开发定制驱动、创建最小内核、定制操作系统组件以及测试与集成等;应用程序开发阶段的主要任务是开发特定的应用程序及中间件。WindowsCE系统的开发流程如图7.7所示。7.3WindowsCE应用程序开发流程
图7.7WindowsCE下应用程序开发流程在WindowsCE下开发应用程序也可划分为3个步骤:
(1)获得特定WindowsCE平台的SDK;
(2)在WindowsCE模拟器上编辑和调试代码;
(3)在实际目标平台上编译和运行程序,如果需要在设备上调试程序,可以通过ActiveSync进行。7.3.1安装SDK
大多数应用程序开发者会选用VisualStudio2005或者EVC开发应用程序,如果是这样,那么安装合适的SDK是第一步工作。SDK(SoftwareDevelopmentKit)是一系列头文件、库文件、文档、平台管理器和运行时库的总称。开发人员可使用SDK为某个特定的平台开发应用程序。
使用VisualC++为桌面Windows开发应用程序同样须安装SDK,微软也会在自己的网站上提供最新的开发桌面应用程序的SDK(称为PlatformSDK)供用户下载。但是绝大多数桌面Windows开发人员却对此一无所知。主要原因有两个:第一,桌面Windows是不可定制的。桌面Windows中包含的组建和功能模块相对固定,因此桌面Windows的SDK内容也就相对固定,我们几乎可使用同一套PlatformSDK为所有桌面Windows开发应用程序。第二,PlatformSDK已经被集成到了VisualC++
中。在安装VisualC++时,开发人员可能并不知道PlatformSDK也同时被安装。
WindowsCE不能像桌面Windows一样,有一个统一的SDK。WindowsCE是一个可以定制、裁剪的操作系统,每一个WindowsCE平台包含的功能都不尽相同,因此每个平台向应用程序提供的API集合都不相同。
VisualStudio和eMbeddedVisualC++
都依赖特定的SDK开发应用程序,只有安装了特定的SDK后,在开发工具的“新建项目向导”中才会有相应的选项。在eMbeddedVisualC++中,提供了PlatformManager来管理已经安装的SDK,从菜单Tools→ConfigurePlatformManager…命令可打开“PlatformManager”对话框,如图7.8所示。
图7.8EVC环境中的QQ2440SDK在VisualStudio中,可从菜单Tools→Options→DevicesTools→Devices中查看已经安装的SDK,如图7.9所示。
有些读者可能注意到,在安装开发工具时,默认会安装一个称做“StandardSDK”的SDK。前面已经介绍过,由于WindowsCE操作系统的特性,不可能存在“标准”的SDK。所谓StandardSDK,只不过是微软把WindowsCE中最常用的一些功能取出来作为一个“标准”的SDK,使用StandardSDK开发的应用程序,可在大多数WindowsCE平台上运行。但是StandardSDK也并不是万能的,例如,StandardSDK不支持中文和DirectX等。
图7.9VisualStudio环境中的QQ2440SDK应用开发人员可由两种途径获得SDK:
(1)从微软或者第三方处获得SDK;
(2)通过PlatformBuilder导出自己的SDK。
如果开发人员希望该平台可扩展,其他应用可在该平台运行,则基本原则是谁建谁就负责提供,即谁构建了该WindowsCE平台,谁就应该负责提供该平台的SDK。当然,有些平台是没有必要扩展的,也就没有必要为它提供SDK。典型的代表是便携式视频播放器(PortableMediaCenter)。如果应用程序所运行的平台不是由自己构建的,而是由第三方提供的,那么第三方应该负责提供该平台上网SDK。PocketPC和Smartphone是这类平台的典型代表。微软构建了基于WindowsCE的PocketPC和Smartphone平台,自然应该由微软提供PocketPC和Smartphone的SDK。
如果应用程序所运行的平台是由自己构建的,那么开发人员可通过PlatformBuilder的导出SDK功能创建自己的SDK,被导出的SDK由头文件、库文件、运行文件、平台的外延和帮助文件等组成。应用程序开发人员可以利用这个SDK去关联MicrosoftembeddedVisualC++4.0或MicrosoftVisualStudio.NET,为特定平台开发应用,也可把导出的SDK发布给其他用户安装。PB、SDK和开发工具之间的关系如图7.10所示。
图7.10PB、SDK和开发工具之间的关系7.3.2代码编写和调试
1.代码编写
在安装好合适的SDK后,就可通过WindowsCE中的开发应用程序的工具eMbeddedVisualC++
或VisualStudio编写应用程序了。编码过程与桌面Windows应用程序开发没有太大的区别。在编码的过程中要明白两个概念:本机码和托管码。
(1)本机码。一般来说,使用eMbeddedVisualC++开发的应用程序代码又称为本机码(NativeCode)。本机码应用程序使用一套特定软件平台的应用程序开发接口(API)来开发,并且被编译成一个特定处理器(Microprocessor)的目的码(ObjectCode)或机器码(MachineCode)。一般情况下,本机码提供较高的效能(Performance)和最小的资源需求,但是被编译好的本机码或可执行文件(Executable)却只能在此特定软件平台和特定处理器上运行。此外,开发本机码应用程序常需要应用程序开发者自行处理类似内存管理、资源管理、安全性管理等事务,而这些通常必须要由经验丰富的C++应用程序开发工程师来处理。
(2)托管码。利用VisualStudio.NET的VisualC#.NET或VisualBasic.NET开发出来的.NETCompactFramework应用程序代码称为托管代码(ManagedCode)。托管码应用程序是通过使用一套运行时环境(Run-timeEnvironment)的应用程序开发接口(API)来开发的。一般情况下,托管码应用程序的开发会比较简单和快速,并且可跨软件平台和处理器来运行,所以开发出的托管码也能重新使用并有较高的可移植性(Portable)。另外,内存管理、资源管理、资源收集(GarbageCollection)、安全性管理等琐碎的工作都由运行时环境来处理,应用开发工程师无须费心处理。托管码应用程序在目标机器上运行时,通过目标机器端的实时编译器(Just-in-TimeCompiler)来实时地把托管代码编译成目标机器码后在目标机器上运行。
2.代码调试
在WindowsCE下调试代码比较繁琐。虽然WindowsCE和Windows使用相同的可执行PE文件格式,但是WindowsCE下的可执行文件是无法直接在桌面Windows中运行的(用.NETCompactFramework为WindowsCE生成的托管代码可直接在装有.NETFramework的Windows中运行,但这对于开发和调试没有任何意义)。因此,要调试WindowsCE下的代码,有两种选择:使用模拟器(Emulator)调试或者使用WindowsCE设备调试。
图7.11WindowsMobile5.0模拟器
(1)使用模拟器调试。eMbeddedVisualC++和VisualStudio都带有WindowsCE的模拟器。模拟器是一个Windows应用程序,它在Windows操作系统下为WindowsCE提供了虚拟的硬件执行环境,使WindowsCE可在Windows中作为一个Windows进程执行。图7.11所示为WindowsMobile5.0模拟器的界面。
模拟器给开发人员带来的最大好处是在一台机器上就可完成WindowsCE下的软件编码与调试,而无需WindowsCE硬件设备,可省去繁琐的硬件连接与昂贵的硬件设备。和桌面Windows应用开发一样,可通过在代码中设置断点以及单步跟踪代码等方式进行调试。在WindowsCE5.X之前,WindowsCE的模拟器都是在模拟X86CPU上运行的。WindowsCE5.X中新增加了基于ARMCPU的模拟器。这样,如果应用程序最终运行的平台是ARM,那么开发人员就可选用基于ARM的模拟器,进一步减小因为模拟器与真实设备体系结构不同造成的错误。
模拟器不但可用来测试代码,还可方便地访问Windows中的文件和用来测试定制的WindowsCE操作系统。使用模拟器的优点非常明显,但是模拟器毕竟只是一个虚拟的执行环境,其缺点也是显而易见的。模拟器只是模拟WindowsCE可运行的部分硬件,因此,与红外、蓝牙、Wi-Fi、USB及IEEE1394等硬件设备相关的应用程序无法在模拟器上运行。所以,本书仅仅在应用程序开发部分使用模拟器,其余部分都使用硬件设备。建议读者在学习WindowsCE时也尽量使用真实硬件,以免产生“模拟器依赖”。
(2)使用WindowsCE设备调试。使用基于WindowsCE的设备调试类似于传统的嵌入式开发调试。有了开发机和目标机的概念,PC机和WindowsCE设备就分别充当开发机和目标机的角色。
这里先向大家介绍一款非常有用的工具ActiveSync。它是由微软提供的并且可以让WindowsCE设备和桌面Windows的PC机十分方便地进行通信连接,从而实现文件上传、远程调试等功能。可以说,ActiveSync是桌面Windows与WindowsCE之间的纽带。ActiveSync的主界面如图7.12所示。当看到图7.12所示窗口跳出后,可以注意到PC任务栏右下角的ActiveSync变成了绿色,这说明一切准备就绪。
图7.12ActiveSync的主界面在物理层,ActiveSync可通过串口、红外、USB端口和以太网与WindowsCE设备进行连接。因此,要使用ActiveSync与WindowsCE设备成功连接,必须确保WindowsCE设备与PC机至少有一条可用的串口、USB或以太网连接。
在完成上述连接之后,就可以使用ActiveSync下载编写的应用程序和进行代码调试。只要能够在目标设备和开发机之间正确地建立连接,通过设备调试与通过模拟器调试的方法就基本一致了。
7.4.1Windows程序设计基础
Windows程序设计是一种事件驱动的程序设计模式。在程序提供给用户的界面中有许多可操作的可视对象。用户从所有可能的操作中任意选择,被选择的操作会产生某些特定的事件,这些事件发生后的结果是向程序中的某些对象发出消息,然后这些对象调用相应的消息处理函数来完成特定的操作。7.4WindowsCE应用程序接口Windows应用程序最大的特点就是程序没有固定的流程,而只是针对某个事件处理有特定的子流程,Windows应用程序可以说是由许多这样的子流程构成的。
Windows应用程序在本质上是面向对象的。程序提供给用户界面的可视对象在程序的内部一般也看做一个对象,用户对可视对象的操作通过事件驱动模式触发相应的消息处理函数。程序的运行过程就是用户的外部操作不断产生事件,这些事件又不断被处理的过程。
图7.13Windows程序工作原理
Windows这种事件驱动模型的实质源于Windows的消息响应机制。在Windows应用程序中,事件产生消息,消息对应着事件。所谓事件响应,其实就是对各种消息的响应。用户要操作Windows程序,必须借助鼠标或者键盘(在WindowsCE中为触摸笔、按键等)等人机交互工具。Windows系统以特定的频率捕捉各种消息,当捕捉到发往本应用程序的消息时,Windows应用程序将消息传递给相关的消息处理函数做相应的处理。这种等待消息,响应消息的操作方式就是Windows特有的处理机制,称为消息处理机制。在Windows系统中,使用者与系统、系统与应用程序、应用程序之间主要就是采用了这种消息响应的处理机制。Windows程序工作原理如图7.13所示。7.4.2Win32API
在介绍Win32API之前,有必要了解Windows应用程序的两个概念:句柄(Handle)和Windows消息(Message)。一个句柄是指Windows使用的一个唯一的整数值,用于标识应用程序中不同的对象和同一对象的不同实例。诸如一个窗口、图标、菜单、滚动条、输出设备或者文件等均有一个对应的句柄值。
Windows应用程序利用Windows消息(Message)与其他Windows应用程序及Windows系统进行信息交换。由于Windows应用程序是消息或事件驱动的,因此Windows消息的工作机制就显得很重要了。Windows消息由三部分组成:消息号、字参数(wParam)和长字参数(lParam)。消息号由事先定义好的消息名标识;字参数(wParam)和长字参数(lParam)用于提供消息的附加信息,附加信息的含义和具体的消息号的值相关。在Windows中,消息往往用一个结构体MSG来表示,结构体MSG的定义如下:
TypedefstructtagMSG{//结构体MSG
HWNDhWnd;
UINTmessage;
WPARAMwParem;
LPARAMlParam;
DWORDtime;
POINTpt;
}MSG;其中,定义如下:
hWnd:用以检索消息的窗口句柄,若此参数为null,则可检索所有驻留在消息队列中的消息;
message:代表一个消息的消息值,每一个Windows消息都有一个消息值,该值由Windows.h头文件中的宏定义来标识;
wParam和lParam:包含有关消息的附加信息,它随不同的消息而有所不同;
time:指定消息送至队列的时间;
pt:指定消息发送时,屏幕光标的位置。pt的数据类型POINT是一个结构体。
POINT的定义如下:
TypedefstruvttagPOINT{
LONGx;//点在屏幕上的横坐标
LONGy;//点在屏幕上的纵坐标
}POINT;将系统定义的消息进行分类,前缀符号经常用于消息宏,以识别消息所属的类。系统定义的消息宏前缀如下:
BM:按钮控件消息;
CB:组合框控件消息;
DM:默认下压式按钮控件消息;
EM:编辑控件消息;
LB:列表框控件消息;
SBM:滚动条控件消息;
WM:窗口消息。关于Windows中各条消息的具体定义可以参考相应的帮助文件或者程序设计参考手册。
除系统定义消息外,应用程序还可以定义其自己的消息,供内部应用程序和系统内其他进程通信用。不同类型的Windows消息的取值范围如表7.4所示。
表7.4不同Windows消息类型的取值范围为使用户定义的外部消息在整个系统中保持有效,应用程序可以调用函数RegisterWindowMessage注册消息。此函数保证有效消息值,并防止同一随机值被用于两个或更多进程内用户定义的外部消息而产生冲突。
Windows应用程序接收以各种形式输入的消息。这些消息包括键盘的当前状态、光标位置、鼠标状态以及产生消息的时间等。0x07FF系统监视着所有的设备并将输入的消息放入消息队列中,随后将系统队列中的输入消息复制到相应的应用程序队列中,应用程序的消息循环便从消息队列中检索消息并将每一个消息发送到相应的窗口函数中。在了解了句柄和Windows的概念之后,我们将进一步了解Win32API的功能和特点。
Win32API是微软32位Windows平台的应用程序接口(ApplicationProgrammingInterface)。微软所有的32位操作系统平台都支持统一的API,包括函数、结构体、消息、宏以及接口等。也就是说,所有在Win32平台上运行的应用程序都会直接或者间接地调用这些函数。正是由于Win32API接口的良好定义,所以使用Win32API编写的应用程序可在不同的Windows平台之间基本实现代码级的兼容。可以说,Win32API是认识Windows操作系统的一面镜子,通过它,用户可以深入系统地掌握Windows的方方面面。很难想象,一个程序员在没有掌握Win32API的情况下,能编制出很好的基于Windows的应用程序来。
在实际的开发流程中,可以把许多的Windows下的应用程序移植到WindowsCE上,而且所需的工作量远小于重新开发这些程序。将程序移植到WindowsCE的过程中要注意Win32API和WindowsCEAPI之间的不同,具体介绍如下:
WindowsCEAPI是Win32API的一个子集,而且其中部分函数的功能已经精简。例如对颜色和字体的支持更加有限。
WindowsCEAPI具有对WindowsCE的特定扩展功能,其中的一些功能,如触摸屏(TouchScreen)和通知(Notification)需要设备在硬件功能上的支持。
对异常处理的使用具有限制。虽然支持Win32的结构化异常处理,WindowsCE却并不支持C++异常处理。
当从PC平台移植已有的Win32应用程序到WindowsCE时,主要的问题通常是找不到合适的WindowsCEAPI来替换原有的Win32API。应用程序需要满足WindowsCEAPI以及目标系统功能上的限制。7.4.3MFC
Win32API接口基本上使用C语言描述。使用C语言调用Win32CEAPI是Windows下最简单、最直接的编程办法。但是随着面向对象技术,尤其是C++语言的广泛使用,Win32API的编程模型受到了面向对象技术的冲击。为了适应Windows下面向对象程序设计技术的要求,微软推出了MFC(MicrosoftFoundationClasses)。
MFC是一个基于C++语言的面向对象的程序设计框架,它是微软随VisualC++一起提供的基础类库并经过优化和严格测试,封装了大量的WindowsSDK函数和典型Windows应用程序的默认处理。用户只需要进行较少的编程即可完成开发任务,从而大幅度提高了程序开发的效率和速度。MFC提供了大量的基类供程序员使用,常用的有CwinApp、CframeWnd、CMDIFrameWnd、Cview、CDC、Cdocument等。
使用MFC类库的好处是:一方面,MFC提供了一个标准化的结构,这样开发人员可从一个较高的起点编程,从而节省大量的时间;另一方面,它提供了大量的代码,对程序的控制主要由MFC框架完成,而且MFC也完成了大部分的功能,可预定义或实现许多事件和消息处理等等。MFC框架可由其本身处理事件,无须依赖程序员的代码,也可调用程序员的代码来处理应用程序特定的事件。
MFC的优越性主要体现在以下几个方面:
(1)完整地封装了WindowsAPI函数。MFC为经常使用的WindowsAPI函数提供支持,包括窗口函数、消息、控件、菜单、对话框、GDI对象、对象链接和多文档界面等。同时,也提供了具有共性的应用程序的支持,如打印、状态条、工具条、数据支持和OLE支持等。
(2)支持多线程。所有的应用至少有一个线程,这个线程由CwinApp类的对象使用,被称为主线程。为了便于多线程编程,MFC还提供了同步对象类。
(3)
MFC提供了消息自动处理。MFC自动处理每个Windows消息,替代了Switchcase语句。
(4)在同一个程序中可同时使用MFC类和WindowsAPI调用。
(5)
MFC使用与WindowsAPI相同的命名约定。用户可根据类名知道类的功能。
(6)大大减少应用程序的编程量。使用MFC创建一个窗口所需的代码大约只是传统方法编程的1/3,这可以使程序员只花很少的时间与Windows打交道,把更多精力集中在开发自己的程序代码上。为了适应嵌入式和WindowsCE的要求,WindowsCE中的MFC对桌面MFC做了一定的改动。WindowsCE中的MFC增加了一些WindowsCE特有的类,如WindowsCE中一个重要的新特性命令条(Command-bar)控制类;同时删除了对其他一些类的支持。如果应用程序是用标准MFC编写的,需要仔细检查应用程序所用的类、方法和属性,并确认它们在WindowsCEMFC中是否兼容。至于MFC类库中的类,其实绝大部分是从基类CObject派生出来的,只有少部分例外。具体内容可以参考相关书籍。7.4.4ATL
活动模板库(ATL,ActiveXTemplateLibray)是一套C++
模板库。它是一个基于C++的框架,使用它可以大大简化组件的开发过程并提高代码的效率。ATL同微软的MFC有异曲同工之处。MFC的存在已经有十来个年头,它已经成为了占主导地位的Windows应用程序框架。然而在很多情况下,ATL在开发基于Windows的软件上已呈现出后来居上的趋势。尤其是ATL提供了实现基于COM组件内核的支持,使得原本被认为高不可攀的COM编程变为现实。ATL模板类可以完成一些非常繁琐的实现细节。下面简单介绍ATL所提供的一些功能。
具有AppWizard工具,其负责创建起始的ATL工程。
具有ObjectWizard工具,其为基本的COM组件创建代码。
对低级别的COM功能的内置式支持,如IUnknown、类工厂和自注册(Self-registration)功能。
支持微软的接口定义语言(IDL,InterfaceDefinitionLanguage),它提供了对自定义的Vtable接口的调度(Marshaling)支持,以及通过类型库进行描述(Self-description)的功能。
支持自动化(IDispatch)和双向接口(DualInterfaces,也称为双重接口)。
可以支持开发效率更高的ActiveX控件。
提供了对基本的视窗功能的支持。
WindowsCE所支持的ATL是桌面Windows中ATL的一个子集。对于ATL的具体使用请参阅相关书籍。7.4.5.NETCompactFramework
.NETCompactFramework是
.NETFramework的子集,应用程序开发者可以使用相同和熟悉的VisualStudio.NET技术来开发WindowsCE.NET装置的应用程序。VisualStudio.NET2003(含)之后的版本支持应用程序开发者在VisualStudio.NET中使用
.NETCompactFramework来开发和执行。开发环境对
.NETCompactFramework的支持已经由VisualStudio.NET来完成,而WindowsCE.NET装置也必须支持.NETCompactFramework,以确保使用VisualC#和VisualBasic.NET程序语言开发的应用程序可在装置上执行。
WindowsCE.NET是一个简洁、可靠、实时和多任务的嵌入式操作系统。而.NET代表的是它实现(支持)了.NET的技术。WindowsCE.NET版本的.NET技术,我们把它称为.NETCompactFramework。顾名思义,Compact表示.NETCompactFramework是.NETFramework的简洁版。简单地说,.NETFramework主要由两大部分组成:CommonLanguageRuntime(公共语言运行时,CLR)和.NETFrameworkclasslibrary。它提供了一个新的应用程序运行平台,一个高度管理的运行平台。使用者所开发的.NETFramework应用程序在运行时通过.NETFramework的运行平台展现出该应用程序的功能,并且被.NETFramework的运行平台严格控制管理以减少应用程序出错而导致系统不正常的状况。另外,.NETFramework也大大地简化了应用程序的开发和部署,开发出的应用程序是与硬件无关(HardwareIndependent)的而且可跨机器平台执行。
.NETCompactFramework目前有1.0和2.0两个版本。对于平台来说,WindowsMobile2003中自带了.NETCompactFramework1.0版本,WindowsMobile5.0附带了.NETCompactFramework2.0版本;对于开发工具来说,VisualStudio.NET2003附带了.NETCompactFramework1.0版本,VisualStudio.NET2005附带了.NETCompactFramework2.0版本。
下面详细介绍.NETCompactFramework的两个主要组件。
(1)
CommonLanguageRuntime(下文简称CLR)可看成是一个运行时(Runtime)或者一个代理(Agent)。它负责管理程序代码的执行、管理内存(MemoryManagement)、管理线程(ThreadManagement)、转换和类型校验(TypeChecking)等,以确保系统强固、稳定和安全。所以,那些通过CLR运行的应用程序或者程序代码(用.NETCompactFramework、VisualC#.NET或VisualBasic.NET开发出的应用程序)又称做“被管理的程序代码”(ManagedCode);反之,那些不需通过CLR运行的应用程序或程序代码(EVC开发出的应用程序)又称做“不被管理的程序代码”(UnmanagedCode),或称做本机码或内驻码(NativeCode)。
(2)
.NETCompactFramework类库。.NETCompactFramework类库是与公共语言运行时(CLR)紧密集成的可重复使用类的集合,是提供给开发者的编程接口。前面我们已经说过,.NETCompactFramework只是
.NETFramework的简洁版,这里的简洁是指扩展的子集。一方面,.NETCompactFramework去掉了一些不适于嵌入式应用或者无关紧要的功能和类;另一方面,.NETCompactFramework中增加了一些特有的类库支持。要查看.NETCompactFramework是否支持.NETFramework类函数库中的某个类或者成员,可在参考技术文件中查看“Requirements”叙述的“Platforms”中是否列出“.NETCompactFramework”。但要注意的是,技术文件中所附的范例程序并未在.NETCompactFramework中测试过,有可能完全兼容,可以运行,也有可能需要做小部分修改才能运行。7.4.6接口选择原则
Win32API、MFC和.NETCompactFramework三种应用程序的开发选择各有优劣。根据前面介绍的内容,读者应该对本机码应用程序和托管码应用程序有初步的了解。表7.5列出了使用标准Win32API或MFC来开发本机码与使用.NETCompactFramework来开发托管码的优缺点。对于开发者来说可以作为参考。
表7.5使用Win32API或MFC来开发本机码与
Win32是操作系统提供的应用程序开发接口,可用来开发应用程序、驱动程序、控制面板程序和动态链接函数库等,并且开发出来的程序可以有最小的文件大小。因为Win32是操作系统提供的最低阶的应用程序开发接口,所以使用Win32开发应用程序需要较长的开发时间。当要开发驱动程序、控制面板程序、低阶程序代码或实时程序代码等时,Win32是唯一的选择。当开发应用程序时,除了Win32,还可以使用MFC或.NETCompactFramework。我们可以把一台WindowsCE装置看成是由层次化的软件组成的:最底层是使用Win32本机码所开发出的驱动程序;最底层上面是由许多个类似数据解析(Data-analysis)、DLL和COM组件等的中介层(Middle-tier)程序组成的中间层,该层各部分可用Win32本机码、
MFC或ATL来开发;最上层则是提供用户接口和图形窗口接口的应用程序,这些用户应用程序除了使用Win32、MFC和ATL来开发外,还可以使用.NETCompactFramework来开发。
在掌握了以上WindowsCE应用程序的开发工具和方法后,剩下的就是一些对细节的把握。在这里要提醒读者一些在WindowsCE下开发应用程序和一般桌面Windows系统开发应用程序的不同之处和注意事项,如表7.6所示。7.5开发WindowsCE应用程序的注意事项
表7.6开发应用程序的不同之处及注意事项除了上述强调的部分外,使用eMbeddedVisualC++为WindowsCE开发应用程序和使用VisualC++为一般Windows系统开发应用程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年股份质押担保借款合同范本
- 轨道交通线网云平台系统用户需求书-中心部分网络安全专用技术要求
- 2025酒店管理承包合同模板
- 2025废旧钢材购销合同范本
- 2025店面转让合同样本
- 2025上海市空气净化设备维护保养合同
- 2025雇佣离职人员的劳务合同
- 2025年三资企业承包经营合同范本
- 2025版终止房屋租赁合同范本
- 2025建筑工程分包合同(2)
- 锯床工考试试题及答案
- “皖南八校”2024-2025学年高一第二学期期中考试-生物(乙)及答案
- 血站安全与卫生培训课件
- 人教版四年级数学下册期中期中测试卷(提优卷)(含答案)
- 岩土真实考试题及答案
- 大部分分校:地域文化形考任务三-国开(CQ)-国开期末复习资料
- 2024年全国中学生生物学联赛试题含答案
- 《人工智能基础》课件-AI的前世今生:她从哪里来
- 数独题目高级50题(后附答案)
- 全媒体运营师-国家职业标准(2023年版)
- 2023年浙江高职考数学真题卷
评论
0/150
提交评论