Windows Mobile开发环境搭建指南
本文描述了如何搭建典型的Windows Mobile开发环境。介绍了相应的IDE、SDK及辅助开发工具的安装及常用配置,并对Windows Mobile下一代开发环境的发展前景做出展望。本文适合初次接触Windows Mobile开发的开发人员。
Windows Mobile开发简介
Windows Mobile是微软公司操作系统产品线上重要的一环。与Windows 9x/NT/XP/2003相比,Windows Mobile作为完整产品线出现在公众面前的时间非常短,但它的发展却异常迅速,而在这一发展过程中,开发人员提供了绝对关键的推动力。现在,越来越多的开发人员(特别是.NET开发人员)希望能尽快进入Windows Mobile的开发领域,而他们所面临的首要问题,除了熟悉Windows Mobile平台特性之外,便是如何搭建适合的开发环境。因此,本文就将从如何搭建一个Windows Mobile开发环境入手,对Windows Mobile平台的开发特性进行概要描述,以期帮助开发人员迅速进入Windows Mobile开发领域。
在展开本文的内容之前需要说明的一点是,Windows Mobile平台开发主要包含以下两方面内容:
平台级开发
应用级开发
因为Windows Mobile平台构建于微软的Windows CE系列操作系统之上(当前正式商用版本为Windows CE .NET 4.21),而Windows CE操作系统具有非常良好的模块化特性,因此开发人员,特别是手机设备厂商,可以通过微软提供的Platform Builder及eMbedded Visual C++(以下简称为eVC)非常方便地定制自己所需的操作系统。这对应的是上面所说的平台级开发。
然而,绝大多数的开发人员并不需要去构建一个全新的、个性化的系统,他们只需要关心如何构建能够运行在Windows Mobile设备上的应用程序。为此,微软按主要智能设备自身硬件设备特性的不同以及用户体验的差异,定制出了Windows CE .NET 4.x系列操作系统的两个主要分支,分别安装在不同的Windows Mobile硬件设备中,从而也就构成了我们通常所说的Pocket PC和Smartphone。以下内容中的Windows Mobile开发,除特指之外,均表示Pocket PC/Smartphone开发。
本文中提供的大量开发工具,除单独标出的以外,均可在http://msdn.microsoft.com/mobility/downloads/default.aspx下载。
迅速搭建开发环境
为了进行Windows Mobile开发,我们需要搭建相应的开发环境。所幸的是,这一环境搭建起来非常简单。
安装Visual Studio .NET 2003
为了降低Windows Mobile的开发难度,提高开发人员的开发效率,微软把.NET Framework移植到了Windows Mobile设备上,针对Windows Mobile设备及Windows CE .NET操作系统设计了.NET Compact Framework(以下简称.NET CF)。而Visual Studio .NET 2003正是开发.NET CF应用程序的最佳IDE。在Visual Studio .NET 2003的安装中默认集成了.NET CF 1.0,同时提供了Pocket PC 2002的开发模板,可以直接用来开发Pocket PC 2002应用程序。
您也可以选择Visual Studio 2005作为开发工具,目前最高版本为Beta 1 Refresh。在Visual Studio 2005中,默认提供了Pocket PC/Smartphone 2003 SE(第二版)的开发模板,同时将Pocket PC 2003 SE开发使用.NET CF版本升级到2.0 (beta)。
安装eVC (可选)
以上环境已经完全可以基于.NET CF开发Windows Mobile应用程序。但如果您想使用C/C++语言来进行native开发,或者想在Windows Mobile设备上开发COM组件及应用,那么可以选择eVC作为开发工具。目前eVC的最高版本为4.0 + SP4,请确保安装了最新的补丁包。
也许您会问:既然已经有了Visual Studio .NET环境,为什么还要使用eVC作为开发工具呢?这主要是因为,当前的.NET CF功能相对而言还很不完整,有很多Windows CE .NET操作系统的核心功能没有被封装入.NET CF,如:加密/解密、网络底层通讯、COM互操作、RAPI等等。为了完成上述操作,我们或者使用平台调用(P/Invoke)以托管方式开发,或者使用eVC直接针对系统底层进行native开发。对于COM互操作,目前.NET CF还不提供COM互操作(Interop)机制,只能使用eVC进行C/C++ COM开发。好消息是,在.NET CF 2.0中将提供功能强大的COM互操作特性支持,同时也将在Visual C++ 2005环境中同时提供managed及native开发功能,这样所有的开发工作将完全整合在Visual Studio 2005同一环境中。
安装Pocket PC/Smartphone 2003 SDK
为了开发Pocket PC 2003或Smartphone 2003应用程序,您还需要安装Pocket PC 2003 SDK或Smartphone 2003 SDK。值得注意的是,这两款SDK中所包含的模拟器均为英语环境,如果您想使用简体中文环境的模拟器,请去微软网站上单独下载。
如果您使用Visual Studio 2005开发Windows Mobile应用程序,则不需要单独安装相应的SDK,因为SDK已经被默认集成至了Visual Studio 2005环境中。
SQL Server CE (可选)
这是Pocket PC上推荐使用的嵌入式数据库产品,它与SQL Server桌面版之间可以实现良好的数据同步及互操作,目前正式版的最新版本为2.0。在SQL Server 2005 Beta 2测试版中,包含有SQL Server CE 2.0的升级版本SQL Server 2005 Mobile Edition——不过该版本目前只支持Pocket PC 2003系统。预计SQL Server Mobile Edition在下一个版本中才能提供对Smartphone的支持。
ActiveSync环境搭建
在完成了上述开发环境的搭建之后,您就可以在Visual Studio .NET中开发和调试应用程序,并在设备/模拟器中进行部署。但是,如果您还需要进一步执行下述操作,那么请按本节所述继续搭建ActiveSync环境。可能的执行操作包括(但不限于):
l 向设备/模拟器中复制文件
l 从设备/模拟器中删除文件
l 与设备/模拟器同步数据
l 开发和调试包含RAPI (Remote API)功能的应用
l ……
安装ActiveSync
ActiveSync是一款管理Windows Mobile设备连接、与PC进行数据同步的工具。如果您开发时使用的是真实设备,则最好事先安装ActiveSync使之与PC机连接。如果您使用的是模拟器,则除了安装ActiveSync以外,还需要安装下述工具。
安装Connect Emulator with ActiveSync
如果您使用的是模拟器软件,除了安装ActiveSync外,还必须安装Connect Emulator with ActiveSync这款工具软件。它将使您可以直接通过ActiveSync连接到模拟器上。
辅助工具介绍
除了上述基本开发工具以外,在Windows Mobile开发社区中还存在着大量的辅助工具,包括应用程序框架、工具、控件等等。其中有一些由于定位准确、制作优良、使用方便,已经成为 Windows Mobile开发不可或缺的好助手。以下列出其中的一部分,更多的还存在于Windows Mobile开发者社区及互联网上,等待着您去发现。
OpenNETCF.org Smart Device Framework
由几位长年活跃于Windows Mobile开发者社区的MVP共同开发的OpenNETCF.org Smart Device Framework (以下简称为SDF),几天前刚刚获得了Pocket PC Magazine评出的2004年度最佳.NET开发框架大奖。熟悉SDF的开发者都会认为,对于这一奖项,OpenNETCF的确当之无愧,因为SDF 几乎已经成了Windows Mobile开发者不可或缺的工具。他们对.NET CF的不足给出了及时的弥补,在SDF中,您可以找到Configuration、XML Serialization、 Notification、Interop Services、WSE 2.0等一系列.NET CF当前版本尚未提供的功能,以及诸如ListBoxEx等优秀的控件。更值得一提的是,SDF是一项完全免费的开源项目。这几位MVP为整个 Windows Mobile开发者社区所做的贡献也许真的无法用金钱来衡量。
下载地址:http://www.opennetcf.org。
Windows Mobile Developer Power Toys
这是微软继Pocket PC/Smartphone 2003 SDK之后为开发人员提供的另一套开发辅助工具集。其中包含不少非常值得一用的优秀工具,如:
l ActiveSync Remote Display:把连接在PC上的智能设备影像通过PC屏幕放大显示
l CECopy:以命令行的方式向所连接的智能设备传输文件
l Hopper:用于Pocket PC 2003的用户输入压力测试工具
l PPC Command Shell:用于Pocket PC 2003的命令行工具
l TypeIt:用于Smartphone 2003的辅助文字输入工具
l ……
Mobile Application Development Toolkit 2004
这是微软近期推出的Windows Mobile开发工具及资料集,其中包含上述所有产品及工具,以及一系列相关的文档、教程及参考资料。
结束语
好了,对于如何搭建Windows Mobile的开发环境就介绍到这里了。可以肯定地说,随着微软公司支持力度的增加和Windows Mobile开发者社区的成熟,Windows Mobile开发将面临越来越有利的良好环境。
MicrosoftWindows CE是紧凑的、高效的和可升级的操作系统,它被广泛的应用在各种嵌入式式的产品中,从手持电脑到专门的工业控制器和消费用电子产品中。Windows CE已经通过了其自身的能力证明:它能够满足32位嵌入式式程序开发的需求。同样重要的是:Windows CE使嵌入式式系统的设计者得以充分利用Microsoft的32位基于Windows的开发工具的全部的函数。
嵌入式的应用软件选择Windows CE的首要原因之一是Microsoft Win32应用编程接口(API)的广泛应用。从运行在Microsoft WindowsNT操作系统下的高端服务器到最小的台式机和内嵌式的应用中,WIN32 API几乎是所有为面向Windows开发32位应用软件的内核。
本文的目的是向那些开发基于Windows CE的新的嵌入式式系统的开发者介绍WIN32 事件驱动编写程序。本文将:概述32位Windows操作系统和WIN32编程模型。介绍线程,事件和消息是如何操作的。给出Win32如何管理Windows CE的内存。解释 Win32意外操作的概念。
比较同步和不同步设备的界面的不同的方法。总结明确定义的API的优位。本文并不是刻意要完全做Win32的编程指南,而是要介绍用Win32作为嵌入式式应用程序的开发工具。
简介
对于全世界的成千上万的程序开发者来说,Win32程序模式很常见。WIN32是台式机或企业广泛应用的强大目标,而且随着Windows CE的涌现,它也成了嵌入式式系统的理想的程序界面形式。WIN32为Windows CE操作系统提供了一致的,文档完备的并且函数强大的
程序界面。
用WIN32在Windows CE平台开发的程序同其他的WIN32程序差不多;这意味着程序开发者在开发新的面向Windows CE操作系统的应用程序的时候,能够应用这些大量的WIN32的程序资源、第三代工具和外部的专门的技术。具有WIN32编程经验的程序员会发现创建新的(维护已有的)面向Windows CE设备(如手持电脑)的应用程序远比创建类似的面向特殊的平台或其他应用不广的嵌入式式的操作系统的应用程序简单。
嵌入式式系统的设计者们很快意识到Windows CE的强大,并且以惊人的快速使这个操作系统与它们的新产品一体化。可是,许多嵌入式式软件的开发者对Windows的事件驱动程序的一般技术不熟悉。对于这些软件开发者来说,在他们开始他们第一次的基于Windows CE的项目之前,了解一些WIN32的基础的知识是有好处的。
什么是WIN32?
“WIN32”表示对于所有的Microsoft 32位平台的一种普通的应用编程接口(API)。这些平台通常指:Windows 95, Windows 98
Windows NT,Windows CE。
本文我们主要关注Windows CE操作系统,可是需要弄清楚的是大多数 Win32的应用编程接口对上面所有三种平台都适用。这种同用的应用编程接口的优位有很多:容易登录到应用程序中,有大量的已有程序的知识,范例和第三代软件的资源。
平台的差别
WIN32的应用编程接口定义了你作为一个程序员有用的Windows平台。WIN32应用编程接口的目的是提供了一个常用的界面的设置,可是虚拟,不同的平台由于不同的特性及硬件的约束,其应用编程接口也不同。WIN32平台家族的一些成员支持全部的WIN32的应用编程接口(下简称API),而其他的只支持一部分的API。 为紧凑的、嵌入式式的应用软件和小型设备而设计的Windows CE,WIN32的API最受限制。尽管如此, Windows CE 的API也是足够完善的,能够处理实际的大量的高级的嵌入式式应用程序。
WIN32与Microsoft基本类库(MFC)
用WIN32界面设计并不是创建32位基于 Windows的应用程序的唯一的途径。另一种重要的途径是可在WIN32与 Microsoft Visual C++开发环境使用的Microsoft基本类库(MFC)。MFC为许多(不是所有)的WIN32的API进行了高度的封装(图1)。通常,MFC提供了代表重要的WINDOWS的用户界面对象的类,象窗口,对话框,画刷,画笔,和字体。MFC也为没有任何用户界面要求的嵌入式式应用软件提供了相应的类。MFC类的成员函数调用WIN32API的函数,可以使复杂的应用程序的设计巧妙的简化。作为WIN32的程序员,你可以自由的选取使用C或C++和 WIN32 API, 或者用C++与MFC。VISUAL C++开发系统对于所有的,包括 Windows CE 的WIN32的目标操作系统都支持以上的两种开发系统。
本文直接介绍WIN32 API。应用 Windows CE下的MFC的详细的消息,参阅 Windows CE SDK文档。
WIN32程序模型
WIN32是超越所有32位WINDOWS平台的常用和一致的(尽管并不全部相同)API。为了对WIN32 API有一个透彻的了解,以便高效的使用它的函数,了解一些底层操作系统的基础十分重要。本节总结了32位操作系统和 Win32 API的最重要的概念,为你更深入的学习提供基础。要得到更多更详细的关于32位WINDOWS的体系结构、 Win32 API、以及其他的程序设计的主题,你可以读一本关于那个主题出版的书。Microsoft出版社能提供一些这样的书籍;在本文的最后,列着部分这些书的条目。
Windows CE的内核和 Win32 API
那些对WINDOWS CE的人可能会有一个错觉,认为它仅仅是现有的操作系统(如WINDOWS95)降级版。但事实上Windows CE是以小型的、高度用户化的面向嵌入式式应用程序的操作系统开发起来的。在WINDOWS CE排除(或代替)了一些基于WINDOWS CE的应用软件所不需要的操作系统特性的同时,它的内核也具有大量的其他Microsoft 32位的操作系统的最精华的东西。例如在Windows NT下, 所有的在Windows CE下运行所应用软件都运行在有优先权的多任务处理环境下,在被全保护的内存空间里。还有,象 Windows NT一样,Windows CE支持本地统一的字符编码标准码字符串,使它更适于国际推广。可是,不象其他的32位WINDOWS平台,, Windows CE是十分紧凑和用户化的,仅仅占用小于200K的内存。
Windows CE的WIN32 API比其他的32位的Windows操作系统的WIN32 API要小;它只包括大约相当于Windows NT的半数的API。但是 Windows CE的WIN32 API也有其他系统所没有的特性。例如:通知API,它能够操作系统的层次,而不是在运行的应用程序的层次上处理
通知事件(如时钟)。触屏的API和对Windows CE的数据库的内置的支持是其他的操作系统所没有的。触屏的API使用于触觉敏感显示器的屏幕校正和用户交互的管理容易实现,而数据库的API提供了快速简捷的访问紧凑的、一般用途的数据库的工具。另一个关于Windows CE的鲜为人知的方面是它的高度的模块化;嵌入式式系统开发者(用Microsoft Windows CE内含的面向Visual C++的软件包)能够创建一个对于它们的独特的硬件平台和应用软件用户化了的Windows CE的版本。
Windows CE操作系统为设计提供了全新的设计环境。Windows CE的开发者几乎不需要支持原有的应用程序或设备,所以操作系统在设计时可以考虑到应用一些最新的思想和应用程序,并且应用最先进的嵌入式式的32位微处理器产品作为它的硬件目标平台。这对于一个使用Windows CE平台的WIN32 API的用户来说意味着什么呢?这意味着对于现代的、32位的嵌入式式系统,它是一种更简单的API,更加优化的目标操作系统。下面,我们将研究一些重要的WIN32 API和Windows CE操作系统的内部的内容。
程序和线索
了解WIN32 API和Windows CE操作系统的底层内容的第一步就是了解多任务和多线索应用程序是如何组织的。WIN32术语中,程序被定义成一个正在运行中的程序实例。象其他的32位 Windows 平台一样,Windows CE是一个多任务的操作系统,在一个运行中的程序里,它支持执行多个线索。
对于嵌入式的应用程序,Windows CE的多线索执行能力是它函数的重要的体现。这样就使WIN32嵌入式程序开发者优先考虑WIN32的线索的创立与同步。
WIN32的线索的处理同其他常用的嵌入式的操作系统是有区别的。不象Unix或其派生的系统,32位Windows平台从一开始设计就支持多线索应用程序。线索管理(时序安排,同步和资源管理)由内核来完成,程序开发者利用函数装入内核(通过WIN32 API访问)来建立和管理他们应用程序中的线索。例如,如果一个嵌入式应用程序必须监视多个输入设备并且在监视到一个或多个设备上不同步发生的事件的时候要作出恰当的反映。更进一步,如果这样一个程序也需要更新一些共享的资源(如全局数据结构,磁盘上的文件,或其他设备)来作为与相关设备事件的反映。象这样的一个程序需要一个可靠的线索管理系统。这恰恰是WIN32 API能够提供的函数:多个线索能够快捷并且容易的用WIN32 API线索创建界面建立;同步线索(多个线索同时访问一个数据)可以通过不同的方式完成,包括关键的段,有名称和没有名称事件,以及互斥的目标。
Windows CE 被设计成在执行这些同步时占用最少的程序资源。这位对那些函数不强大的开发者来说十分重要;因为内核来负责线索的管理,不需要使用另外的处理器来循环检测程序或线索完成,以及执行其他的无用的应用程序层次上的线索管理。内核已构建好如何管理若干的线索并且使程序高效地进行的程序。对于包括若干个程序的应用程序,WIN32 向用于线索、程序管理和同步提供了一套的完备的处理方法。这些线索管理特性非常适于嵌入式应用程序软件,并且对Windows CE开发者是容易得到的。消息在32位windows平台上运行的程序更专门化,程序的线索依赖于消息来初始化程序,控制系统资源并且与操作系统和用户通信。windows消息有各种各样来源,包括操作系统,用户活动诸如键盘输入、鼠标、触到屏幕,以及其它运行的程序或者线索。当消息被送到线索时,这条消息被放置在消息队列中等待最后处理。每一条线索拥有完全不独立于其它线索所拥有的消息队列的消息队列。线索一般有不断运行的消息循环,恢复和处理消息。当队列地没有消息,并且线索不从事于其它任何活动,系统挂起线索,以节省中央控制器资源。消息也能用于控制目的,初始化你的应用程序中各种类型的程序,并且他们能利用消息参数传递数据。例如,线索可能收到触屏被激活的消息,消息参数可以表明X和Y为用户行动的坐标。在另一种类型的消息中,参数可以包括指针或者指向数据结构、窗口或其他对象的句柄