摘要:学习如何使用 .NET Framework 1.0 精简版和 Visual Studio .NET 2003 开发可靠的智能客户端设备应用程序。
简介
Microsoft 开发 .NET Framework 精简版的目的就是:开发应用程序。我所说的应用程序是指那些用来显示、收集、处理和转发信息的应用程序,也就是那些能够促使用户携带某个设备的应用程序。尽管这些应用程序通常都有一个界面,但实际上它们并不需要。它们可以使用本地数据,也可以使用远程数据,或者同时使用这两种数据。
.NET Framework 精简版简化了在智能设备上开发应用程序的过程。目前,智能设备包括 Pocket PC、Pocket PC 2002、Pocket PC Phone Edition 以及运行 Windows CE.NET 4.1 或更高版本的其他设备。
您需要使用 Visual Studio .NET 2003 来创建针对 .NET Framework 精简版的应用程序。可以使用 Visual C# .NET 和/或 Visual Basic .NET 创建应用程序。
.NET Framework 精简版有两个主要组件:公共语言运行库和 .NET Framework 精简版类库。
运行时是 .NET Framework 精简版的基础。它负责在执行时管理代码,提供内存管理和线程管理等核心服务,同时又确保代码的安全性和准确性。针对运行时的代码称为托管代码,不针对运行时的代码称为非托管代码或本机代码,eMbedded Visual C++ 中的代码即是非托管代码。
.NET Framework 精简版类库是可以重复使用的类的集合,您可使用它快速方便地开发应用程序。设计这种框架时考虑了其适用性,是适用于 Microsoft,还是适用于第三方平台。这对用户来说意味着什么呢?简单来说,如果 .NET Framework 精简版的某个版本是为某个平台(例如,移动电话或其他供应商的 PDA)创建的,那么您所使用的编码技术以及今天您为 Pocket PC 创建的应用程序将同样可以在这个平台上运行。 公共语言运行时
公共语言运行库提供了管理 .NET Framework 精简版代码的执行环境。代码管理的形式可以是内存管理、线程管理、安全性管理、代码验证和编译以及其他系统服务。
运行时是为了增强性能而设计的。它使用实时 (JIT) 编译的方法,使托管代码能够以运行应用程序的平台的本机语言运行。这样,您就可以创建适用于多种平台的应用程序,而不用再担心如何分别为每个平台重新编译或重新生成可执行程序了。
即使您的移动应用程序与托管代码一样都是用 Visual Basic .NET 或 C# .NET 编写的,仍然可以集成存储在动态链接库(DLL,包括 Windows CE API)外部的功能和子例程。.NET Framework 精简版提供的数据类型以及对结构的支持使您能够轻松地将 Windows CE API 的功能集成到您的应用程序中。 .NET Framework 精简版类库
.NET Framework 精简版类库是与公共语言运行库紧密集成的可重复使用类的集合。您的应用程序将利用这些库来派生出所需的功能。
就象其他面向对象的类库一样,.NET Framework 精简版类型可用于完成许多常见的编程任务,包括界面设计、利用 XML、数据库访问、线程管理和文件输入/输出等。
下面介绍通过 .NET Framework 精简版可以获得的常用功能。
与窗体相关的类
.NET Framework 精简版实现了 System.Windows.Forms 和 System.Drawing 类的子集,使您能够为设备应用程序创建一个基于 Windows CE 的丰富的用户界面。Visual Studio.NET 中的 Form Designer(窗体设计器)将替您管理与这些类进行的大部分交互。
可以在 .NET Framework 精简版下实现的 Windows 窗体包括:窗体支持、.NET Framework 中的大多数控件以及集成的第三方控件、位图和菜单。表 1 列出了 .NET Framework 精简版中包括的控件。
表 1:.NET Framework 精简版中包括的控件
控件 |
说明 |
Button |
简单的命令按钮 |
CheckBox |
常见的复选框 |
ComboBox |
包含多个项目的下拉列表 |
ContextMenu |
实现上下文相关菜单 |
DataGrid |
可以绑定到数据源的网格 |
DomainUpDown |
可以通过滚动条浏览的项目列表 |
HScrollBar |
水平滚动条 |
ImageList |
存储图像的容器 |
InputPanel |
控制软键盘输入面板 (SIP) |
Label |
用于显示文本的简单控件 |
ListBox |
提供项目列表 |
ListView |
提供四种数据视图:大图标、小图标、列表和详细资料 |
MainMenu |
实现窗体上的菜单 |
NumericUpDown |
包含滚动条的数字输入字段 |
OpenFileDialog |
访问本机上的打开文件对话框 |
Panel |
用于保存其他控件的容器 |
PictureBox |
显示图像 |
ProgressBar |
可视的任务进度指示器 |
RadioButton |
常见的单选按钮 |
SaveFileDialog |
访问本机上的保存文件对话框 |
StatusBar |
用于显示文本的简单面板 |
TabControl |
为应用程序提供选项卡界面 |
TextBox |
标准的文本输入字段 |
Timer |
基本的计时器组件 |
ToolBar |
实现窗体上的工具栏 |
TrackBar |
数字数据使用的滑块界面 |
TreeView |
以层次结构的形式显示数据 |
VScrollBar |
垂直滚动条 |
由于 .NET Framework 精简版是 .NET Framework 完整版的子集,因而精简版包括的控件也是完整版的功能的子集。出于规模和性能方面的考虑,.NET Framework 精简版未包括某些控件属性、方法和事件。但如果需要,您只要完成少量的编码工作,就可以自己实现这些未包含的功能。这是因为 .NET Framework 精简版允许用户根据基础控件类创建自己的控件。这样,您就可以通过添加自己的属性、方法和事件来创建您自己真正需要的控件。
数据和 XML 类
.NET Framework 精简版包括一组类,使您能够轻松地将来自关系型数据源或非关系型数据源的数据(包括 XML 内容)集成到您的移动应用程序中。这些类是在 System.Data 和 System.Xml 命名空间下定义的。.NET Framework 精简版所实现的数据和 XML 类是 .NET Framework 中的数据和 XML 类的子集。
Web Services
.NET Framework 与 Web 服务结合紧密。.NET Framework 精简版的 System.Web 命名空间所提供的功能是相应的 .NET Framework 命名空间提供的能力和功能的子集。更重要的是您可以创建 Web 服务客户端,但不能通过 .NET Framework 精简版来提供 Web 服务。
这些 XML Web Service 客户端可以同步,也可以异步。创建用于 .NET Framework 精简版的 XML Web Service 客户端非常容易。使用 Visual Studio .NET IDE 可以完成大部分工作。
GDI 支持
.NET Framework 精简版通过 System.Drawing 命名空间支持基本的 GDI 绘图元素,包括位图、笔刷、字体、图标和画笔等。
基类
.NET Framework 精简版提供了许多基类,为开发人员提供了大量的功能。使用这种基础结构可以编写多种 .NET 应用程序,包括能创建多线程应用程序的应用程序 (System.Threading)、利用网络资源的应用程序 (System.Net) 以及处理文件的应用程序 (System.IO)。
IrDA 支持
Windows CE 设备(例如 Pocket PC 和 Pocket PC 2002)具备红外线 (IR) 通信能力。为了支持这种通信能力,.NET Framework 精简版中包括了许多类,使用户能够在自己的应用程序中利用 IR 通信。这些类是 System.Net.IrDA 命名空间的一部分。您可以使用 IR 与 Pocket PC、打印机以及其他支持 IR 的设备进行通信。
Bluetooth 支持
.NET Framework 精简版本身并不支持 Bluetooth。用户可以通过串行端口通信或通过供应商的 API 来访问针对 Pocket PC 的大多数第三方 Bluetooth 支持。
Visual Basic 支持
Visual Basic .NET 可以不受限制地使用 Visual Basic Helper 库中的辅助功能。.NET Framework 精简版也包括一部分辅助功能。之所以包括这些辅助功能,是因为 Visual Basic 开发人员认为它们是这种语言的核心组成部分。
对于正在转换到 .NET Framework 精简版的 Visual Basic 或 eMbedded Visual Basic 开发人员来说,这意味着您过去经常使用的许多 Visual Basic 语言功能在 Visual Basic .NET 中同样可以获得。
自选功能
为了节省目标设备上的资源,Microsoft 将 .NET Framework 精简版分成几个逻辑组件。通过将组件作为单独的 DLL(或者 .NET Framework 精简版中所说的程序集)进行传递,Microsoft 使您能够选择所需的功能,并且只选择目标设备上能够容纳的功能。
System.SR 程序集就是这样一个例子,它包含错误信息字符串。在应用程序中包括这样一个程序集后,用户就可以了解所发生的任何错误的详细信息。这在调试阶段非常有用,但等到将产品投入生产后,可能就不太需要了。即使应用程序中不包括这个程序集也不会影响应用程序的性能或功能,只是您不能查看详细的错误信息而已。
.NET Framework 精简版自选功能实现方法的另一个例子是 SQL Server CE 组件,该组件以一组 DLL 的形式进行传递,总体大小稍稍超过 1 MB。除非您在应用程序中添加对 System.Data.SqlServerCe 程序集的引用,否则应用程序中将不包括这些 DLL。
.NET Framework 精简版不包括的功能
Microsot 已经对 .NET Framework 进行了一些重大的删减,使它能够适应 Windows CE 的操作限制。下面将介绍 .NET Framework 中包括而 .NET Framework 精简版中不包括的某些重要功能。
方法重载
重载方法即通过其他方式调用该方法,但它同时也增加了 .NET Framework 的大小。因此,.NET Framework 精简版几乎删除了所有方法的重载。
这有两层含义。第一,开发基于 .NET Framework 精简版的应用程序时,您很有可能会发现以前用于桌面应用程序的某个方法重载在 .NET Framework 精简版中却找不到。第二,当您阅读 .NET Framework 精简版文档时,要特别注意它是否支持某种方法。
缺少的控件
.NET Framework 的很多控件都没有包括在 .NET Framework 精简版中。对于移动开发人员来说,缺少这些控件并没有太大的影响。由于打印功能在移动应用程序中的作用非常有限,因此删除与打印有关的所有控件都不会有什么问题。这些控件包括 CrystalReportViewer、PageSetupDialog、PrintDialog、PrintDocument、PrintPreviewControl 和 PrintPreviewDialog。缺少的这些对话框几乎都可以用您自己的对话框替代,或者使用 Windows CE API 直接访问系统对话框。
可以用第三方控件替代 .NET Framework 精简版中缺少的控件。有关第三方 .NET Framework 精简版控件的列表,请参阅本文结尾处的参考信息。
XML 功能
.NET Framework 精简版也对其提供的 XML 功能作了同样的删减。缺少的主要 XML 组件是 System.Xml.XPath 命名空间。使用 XPath 命名空间进行 XML 分析比使用 .NET Framework 精简版提供的方法要容易得多。如果缺少 XPath 命名空间,则可以结合使用递归和迭代方法对文档对象模型 (DOM) 进行搜索。
.NET Framework 精简版缺少的另一个主要 XML 组件是可扩展样式表语言转换 (XSLT)。使用 XSLT,您可以将 XML 文档转换为不同的格式。
对于 XML 需要说明一点,.NET Framework 精简版目前不支持开发基于设备的 XML Web Service。
数据库支持
.NET Framework 精简版提供许多与数据有关的工具。为 SQL Server CE 提供本地数据库支持。在服务器端,.NET Framework 精简版支持 SQL Server。
请注意,有一家第三方供应商也提供用于 Pocket Access 数据库的 .NET Framework 精简版组件。有关详细信息,请参阅本文结尾处的参考信息。
二进制序列化
出于规模和性能方面的考虑,.NET Framework 精简版中删除了 BinaryFormatter 和 SoapFormatter 类。
访问 Windows 注册表
.NET Framework 包含 Microsoft.Win32.Registry 命名空间,因此很容易在应用程序中处理 Windows 注册表。很显然,这个命名空间并未包括在 .NET Framework 精简版中,因为它与 Win32 有关,而与 Windows CE 无关。您可以通过调用相应的 Windows API 来访问 Windows CE 注册表。
利用 COM 组件
将 COM 对象集成到基于 .NET Framework 精简版的应用程序中需要执行两个步骤。首先,必须编写能提供 COM 对象的非托管 DLL 包装(即使用 eMbedded Visual C++)。此步骤可繁可简,具体情况取决于 COM 对象的复杂程度。其次,必须使用 PInvoke 访问 DLL 包装。幸运的是,开发小组已经开始着手开发常用的 COM 组件了,本文结尾处的参考信息中列出了一些组件。
安全性
.NET Framework 精简版不能确保访问非托管代码时的安全性。任何应用程序都可以调用任何系统 API 或非系统 API。
目前,.NET Framework 精简版不能提供基于角色的安全性。当事人对象无法识别已知标识或已知角色。
XML Web Service
.NET Framework 精简版 XML Web Service 缺少的最主要的是使用 Cookie 的功能。Cookies 广泛用于在客户端的各个调用之间在服务器上保留该客户端的状态。虽然 Cookie 在 Web 服务中的使用并不象在 Web 站点上那么普遍,但是仍在使用。
.NET Framework 精简版只能对 Web 服务提供有限的加密能力。
打印
.NET Framework 精简版不支持打印。通过 IR 很难与网络打印机或外部打印机进行交互。
要访问网络打印机,需要创建一个基于服务器的应用程序,它能够接受并打印移动应用程序提交的作业。
可以通过 IR 端口直接将输出发送到支持 IR 的打印机上。可以使用 System.Net.IrDA 命名空间来访问移动设备的 IR 端口。
GDI+
Windows CE 本身并不支持 GDI+,因此 .NET Framework 精简版删除了与 GDI+ 相关的功能。
远程处理
.NET Framework 精简版的第一个版本不支持远程处理。
|