对于 Pocket PC 用户和开发人员来说,基于 Microsoft® Windows Mobile® 2003 的 Pocket PC 是一个非常重要的里程碑。Pocket PC 2003 基于新操作系统 Microsoft Windows® CE .NET 4.2,而且是第一个将 Microsoft Windows .NET Compact Framework 集成在 ROM 中的设备。这些改进以及其他更多的特性为移动应用程序的开发奠定了新的基础。本白皮书的目的是讨论对于熟悉基于 Windows Mobile 2003 的 Pocket PC 软件开发工具包的开发人员,新平台提供的主要改变和新功能,以及如何过渡到 Pocket PC 2003 设备和 Pocket PC 2003 SDK。从 Mobile - Devices Developer - Downloads 下载 Pocket PC 2003 SDK(英文)。
概述概括起来,本文的要点包括: Microsoft Windows .NET Compact Framework - .NET Compact Framework 包含在所有新 Pocket PC 2003 设备的 ROM 中,它也可以安装在 Pocket PC 2000 和 Pocket PC 2002 设备的 RAM 中。 Microsoft Visual Studio® .NET 2003 - Pocket PC 2003 SDK 集成到 Visual Studio .NET 2003 IDE 中,而且可以从 Microsoft Visual Basic® .NET 和 Microsoft Visual C#™ .NET 中使用。 eMbedded Visual Tools 3.0 - 要以 Pocket PC 2003 设备作为目标,则不再支持此开发环境。如果要支持本机代码,需要使用 eMbedded Visual C++® 4.0(安装了 SP2),对于托管代码 (.NET) 开发,需要使用 Visual Studio .NET 2003。 eMbedded Visual C++ - 主要改变与新操作系统、Windows CE .NET、调试及远程工具有关。 eMbedded Visual Basic - 主要改变中包括 Pocket PC 2003 SDK 不支持 eMbedded Visual Basic 开发。现有的 eMbedded Visual Basic 应用程序仍然可以在 Pocket PC 2003 设备上运行,以保证向后兼容。eMbedded Visual Basic 开发人员如果希望继续开发,可以改用 Visual Basic .NET,并利用新工具的各种功能。
主要的新功能包括: 新核心操作系统 - Pocket PC 2003 设备在 Windows CE .NET 4.2 上运行。新的操作系统可以使设备运行更稳定、速度更快。Microsoft Pocket Internet Explorer、仿真器技术、网络服务、Microsoft Windows Media™ 技术是获得普遍改进的几个领域。 仿真器增强功能 - 仿真环境更加稳定,并支持三种模式:Pocket PC 2003、Pocket PC Phone Edition 2003(使用 WaveCom WMOD2B 外部 GSM 无线模块支持外部无线通信)和带虚拟无线通信的 Pocket PC Phone Edition 2003。另外,仿真器本身的新功能中包括虚拟交换支持、驱动器映射和 GAPI 支持。 远程配置 - 该功能可以对 Pocket PC(和 Smartphone)进行配置,是一种用于本地和远程自定义设备的强大方法。该功能甚至可用于空中传输 (OTA) 方案。 更新的浏览器 - Pocket Internet Explorer 支持 HTML 4.01、CSS、XHTML、WML 2.0 等,已成为 Internet 浏览器家族中很有影响的成员。 Phone Edition 支持 - 对于如捕获传入短消息服务 (SMS) 消息的支持得到改善。 其他功能 - 还有许多其他的新功能可供研究和使用。
在以下网页中可以看到其他概述信息:
Microsoft Windows Pocket PC 和 Smartphone Developer Portal(英文)
Embedded Developer Center(英文)
Mobility Developer Community(英文)
.NET Compact Framework(英文)
eMbedded Visual C++ 4.0(英文)
Pocket PC 2003 为开发人员提供的改变本章介绍过渡到 Pocket PC 2003 SDK 为 Pocket PC 开发人员提供的改变。
eMbedded Visual Tools 3.0当开发 Pocket PC 2003 应用程序时,不能再使用 eMbedded Visual Tools 3.0 了。但是,对于 Pocket PC 2000 和 2002,仍需要使用该工具集。幸运的是,考虑到您可能需要维护并支持现有应用程序,新工具可以与它们共存。 因此,安装 eMbedded Visual C++ 4.0(Pocket PC 2003 不再支持 eMbedded Visual Basic 开发,请参阅下面相关的独立章节)和 Visual Studio .NET 工具(如 Visual Studio .NET 2003、.NET Compact Framework 等)时,可以保留安装的 eMbedded Visual Tools 3.0。
为 eMbedded Visual C++ 开发人员提供的改变如果需要用 C++ 为 Pocket PC 开发非托管应用程序(本机代码),仍需要使用 eMbedded Visual C++。您不能使用新工具 (Visual Studio .NET 2003) 来构建非托管应用程序。如果目标设备是 Pocket PC 2003 或下一代 Smartphone,则需要使用安装了 Service Pack 2 的 eMbedded Visual C++ 4.0。您不能使用 eMbedded Visual C++ 3.0 来开发、部署或调试 Pocket PC 2003 及下一代 Smartphone 应用程序。但是,由于这两种工具集可以共存,因此仍然可以在同一台 PC 中维护和支持 Pocket PC 2000 和 2002 应用程序。
当您将应用程序从 eMbedded Visual C++ 3.0 过渡到 eMbedded Visual C++ 4.0 时,首先会发现不支持自动升级项目文件。对于该问题,最简单的解决办法是创建一个新的空 eMbedded Visual C++ 4.0 项目,然后手动添加源文件。
eMbedded Visual C++ 4.0 中的大部分改变与 Pocket PC 2003 中使用的新操作系统 Windows CE .NET 有关。但是工具本身也有很多其他的功能。这些功能中的绝大多数与调试和远程工具有关。
在 eMbedded Visual C++ 4.0 中进行调试时,支持 C++ 异常处理。除了标准 Microsoft Win32® API 结构化异常处理 (SEH) 以外,现在您还可以利用处理任意类型异常的特性,确保您的代码具有更好的可移植性和灵活性。您还可以访问运行时类型信息 (RTTI) 来确定对象类型。
一项有趣的调试功能是能够连接到活动进程。也就是说即使有应用程序挂起,并且调试程序未启动,也可以通过选择菜单选项 Build(生成)、Start Debug(启动调试)、Attach to Windows CE Process(连接到 Windows CE 进程)来连接到进程。在活动进程列表中进行选择,提供 PC 中可执行程序的路径,然后调试程序就会启动并连接到选定的进程。另一个很特别的功能是实时 (JIT) 调试挂钩,它使您可以诊断未处理的异常而不是终止应用程序。如果设置了断点,就可以终止多线程应用程序中的所有线程。
使用 eMbedded Visual C++ 4.0 时,有一个称为远程调用分析器 (Remote Call Profilter) 的新工具。您可以使用该工具以多种方法跟踪正在执行的应用程序中的调用。值得一提的还有远程性能监视器 (Remote Performance Monitor),它允许开发人员实时监视多个预定义的规格(类似于 Microsoft Windows XP 性能监视器)。
其他功能还有支持内部函数(编译为内联代码而不是函数调用的函数)、ATL 进程外项目向导(用于创建 COM 进程外服务器)和标准模板库(Standard Template Library,缩写为 STL,支持访问最常用算法和数据结构的子集)。
有关升级到 eVC 4.0 和 Windows CE .NET 的详细信息,请参阅白皮书 eMbedded Visual C++ 4.0 和 Windows CE .NET(英文)。
为 eMbedded Visual Basic 开发人员提供的改变Microsoft 已于 2001 年秋季宣布,将不再为各种设备的新 .NET 平台和工具继续发展 eMbedded Visual Basic。因此,Pocket PC 2003 SDK 不支持 eMbedded Visual Basic 开发,Pocket PC 2003 设备的 ROM 中也不包括 eMbedded Visual Basic 和 ADOCE 运行库。但是,eMbedded Visual Basic 和 ADOCE 运行库可在 Internet 上的以下位置下载:Pocket PC -Downloads - eMbedded Visual Basic(英文),并可以安装到 Pocket PC 2003 设备的 RAM 中。也就是说现有的 eMbedded Visual Basic 应用程序仍然可以在 Pocket PC 2003 设备上运行,因此开发人员仍然可以将 eMbedded Visual Basic 和 Pocket PC 2002 SDK 一起用于 Pocket PC 2003 设备。
eMbedded Visual Basic 开发人员如果希望继续开发,可以改用 Visual Basic .NET 并利用新工具的各种功能。从语言的角度来讲,最大的改变是:Visual Basic .NET 是面向对象的新型语言,其代码是使用包括常用方法、属性和事件的公共 .NET Compact Framework 类库(如用于 Windows 表单的 System.Windows.Forms 和用于管理数据库的 System.Data)来构建的。对常见任务(如严格的类型检查、使用类、调用 XML Web Service 和实现结构化异常处理)的内部支持大大改善了 eMbedded Visual Basic 开发人员以前执行这些任务时效率低下的状况。
对于将 eMbedded Visual Basic 代码转换为 Visual Basic .NET 代码,没有向导或自动过程。必须手动移植代码,期间需要仔细检查和修改: 语言语法 - eMbedded Visual Basic 是一种 VB 脚本语言,因此根据不同的代码类型,语法差异可能很大。 公共代码库的实现 - 需要移植现有的 eMbedded Visual Basic 公共代码库。由于现在支持使用类,因此代码库的实现和使用可能会不同。另外,由于 .NET Compact Framework 是 .NET Framework 的子集,因此对于 Pocket PC 的开发,现在可以利用部分现有的 Visual Basic .NET 类库。 应用程序导航和控制流 - 窗体管理和应用程序导航是通过 System.Windows.Forms 中的类型来处理的,与从 eMbedded Visual Basic 来实现不同。 数据库 - 数据访问是通过 ADO.NET 子集来处理的。Microsoft 为 Microsoft SQL Server 2000 Windows CE Edition 2.0 (SQL Server CE 2.0) 提供了一个托管的数据提供程序。.NET Compact Framework 不包括用于访问本地数据存储(有时称为 CEDB 或 Pocket Access)的托管类型,这种本地数据存储在 eMbedded Visual Basic 开发人员中被广泛使用。 XML - XML 的管理和操作得到内置支持。 XML Web Service - eMbedded Visual Basic 不提供调用远程组件的内置支持。必须使用第三方支持来调用和使用远程组件。支持 XML Web Service 是 .NET Compact Framework 的核心类型之一,被认为是整个 .NET Framework 中的主要集成机制。由于在大多数开发项目中,系统集成的相关工作量通常很大,因此很可能会重写系统集成代码。 异常处理 - eMbedded Visual Basic 中的错误处理由四个字“On Error Resume Next”和无限循环的“If Err.Number <> 0 Then”语句组成。使用 Try . . . Catch . . . Finally 块的结构化、有效异常处理将改善代码的稳定性和容错功能。
在下面的示例中,我们对 eMbedded Visual Basic 和 Visual Basic .NET 中的异常处理进行了对比。示例代码先打开一个文本文件,然后逐行读取直到文件结尾。这是大多数 Basic 程序员所熟悉的概念。
您需要添加 If Err.Number <>0 语句以捕捉并处理 eMbedded Visual Basic 中的异常,见以下代码:
' 打开 ' 变量 Dim sLine As String Dim file As FILECTL.file Set file = CreateObject("FILECTL.file") Screen.MousePointer = 11 ' 由“resuming next”处理错误 On Error Resume Next ' 打开应用程序设置 file.Open "\appdata.txt", fsModeInput ' 检查是否发生错误 If Err.Number <> 0 Then MsgBox "File could not be opened!", vbCritical, "Error" Exit Sub End If ' 在文件中循环 Do While Not file.EOF ' 逐行读取 sLine = file.LineInputString ' 检查是否发生错误 If Err.Number <> 0 Then MsgBox "Data could not be retrieved!", vbCritical, "Error" Exit Sub End If Loop Screen.MousePointer = 1 ' 关闭文件 file.Close
代码以 On Error Resume Next 语句开头,意味着即使发生错误,代码仍继续执行下一行。Err-object 包含已发生的所有可能错误的信息。通过在每行代码后检查 Err-object 的 Err.Number 属性是否为默认值 0,开发人员可以插入代码以处理错误。也就是说开发人员需要猜测在整个代码中可能导致错误的行。让我们来看一下 Visual Basic .NET 代码是如何处理异常的,尽管它在异常处理方面已有很大改进:
' 打开数据文件 ' 变量 Dim sLine As String Dim file As StreamReader Cursor.Current = Cursors.WaitCursor ' 由 Try-Catch-Finally 处理错误 Try file = New System.IO.StreamReader("\appdata.txt") While file.ReadLine <> Nothing sLine = file.ReadLine End While file.Close() Catch ex As Exception Select Case ex.Message Case "FileNotFoundException" MsgBox("无法打开文件!", MsgBoxStyle.Critical, "Error") Case Else MsgBox("无法检索数据!", MsgBoxStyle.Critical, "Error") file.Close() End Select Finally Cursor.Current = Cursors.Default End Try
处理文件管理的所有基本代码位于 Try 块中,处理错误的代码位于 Catch 块中,假设的代码在 Try 和 Catch 块之后运行。代码在组织上有较大改进,所有可能发生的异常也均得到处理,因此代码可读性和应用程序的稳定性得到改善。
有关从 eMbedded Visual Basic 过渡到 Visual Basic .NET 的详细信息,请参阅白皮书 Moving From eMbedded Visual Basic to Visual Basic .NET(英文)。文章 Application Development Landscape for Windows CE .NET(英文)和 Choosing a Windows Embedded API:Win32 vs. the .NET Compact Framework(英文)提供为特定编程任务选择 API 的详细信息。API 的选择最终决定开发工具的选择:Embedded Visual C++ 3.0/4.0 或 Visual Studio .NET。
Pocket PC 2003 为开发人员提供的新功能本节将讨论过渡到 Pocket PC 2003 SDK 为 Pocket PC 开发人员提供的改变。默认安装在 C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Help 中的 Pocket PC 2003 SDK 文档包含有关为开发人员提供的新功能的大量信息。文档内容要点包括:
“What's New with Microsoft Windows Powered Pocket PC 2003”(Microsoft Windows Powered Pocket PC 2003 的新功能)
“Working with the Pocket PC Emulator”(使用 Pocket PC 仿真器)
“Programming the Pocket PC”(为 Pocket PC 编程)
“Pocket PC User Interface Guidelines”(Pocket PC 用户界面指南)
SDK 文档还包含许多有价值的示例项目。
新核心操作系统Pocket PC 2003 构建于 Windows CE 4.20 之上,而 Pocket PC 2000 和 Pocket PC 2002 构建于 Windows CE 3.0 之上。Windows CE 是通过模块化构建的操作系统,也就是说核心操作系统包含构建操作系统新实例时使用的模块和服务。构建在 Windows CE 4.20 之上的设备不会自动包含 Windows CE 4.20 的所有功能,Pocket PC 2003 也是如此。下图显示 Windows CE 4.20 的模块性。
图 1:Windows CE 4.20 是一种模块化操作系统
Windows CE 4.20 中的新操作系统功能对实际设备和 Pocket PC 2003 SDK 都有一定的影响。这些功能有: 改进的仿真器 新增和改进的蓝牙支持 内核增强功能,由此改进了性能,并节省了 ROM 空间 下一代网络层协议(如 TCP/IPv6)支持。TCP/IPv6 支持更大的地址空间。 改进的显示驱动程序 新文件系统(二进制 ROM 图像文件系统),可使 Pocket PC 2003 设备支持 NOR 或 NAND 闪存,然后要求需要模块的页面在 RAM 中执行。这将为 OEM 提供灵活性,以便在设备中权衡选择 NAND、NOR 或 RAM。
有关新功能和相关内容的详细信息,请参阅 Windows CE 4.20 文档(英文)。
新工具Pocket PC 2003 软件开发工具包 (SDK) 文档描述所有新 SDK 工具和其他工具,例如 Windows 中用于 Pocket PC 的 Message Queuing (MSMQ)、用于 Pocket PC 的 HTTP Server 和 SQL Server CE。这些工具包括: CabWiz.ddf - 创建 CAB 文件的模板指令文件。 CabWiz.exe - 命令行实用程序,可以将指令文件作为参数,构建含有程序文件和配置指令的 .cab 文件。有关其他信息,请参阅 SDK 帮助文档中的“Using CABWiz”(使用 CABWiz)主题。 EmuASCfg.exe - 该工具可以配置 ActiveSync 和 Pocket PC 仿真器以允许在以太网虚拟交换上建立 ActiveSync 合作关系。运行该工具前,必须使用 eMbedded Visual C++ 来引导使用 VirtualSwitch 选项的 Pocket PC 仿真器。有关使用信息,请在命令行键入“emuascfg.exe /?”。 RapiConfig.exe - RapiConfig 提供了一种方法,可以使配置 XML 在通过 ActiveSync 连接的设备或仿真器上执行。有关使用信息,请在命令行键入“rapiconfig /?”。 仿真器增强功能
Pocket PC 2003 SDK 包括一个新的仿真环境,该环境可以作为复制运行 Windows CE 的硬件的真正虚拟计算机来实现。由于新仿真器精确地表示了 Windows CE 操作系统和 Pocket PC 组件,因此真正 Pocket PC 设备和设备仿真环境之间的保真度和相似性会大大提高。而且,新仿真器不仅限于仿真英文版的 Pocket PC。从开发角度看,仿真器的稳定性得到了很大改善。
Pocket PC 2003 仿真器有三种仿真模式:Pocket PC 2003、Pocket PC Phone Edition 2003(使用 WaveCom WMOD2B 外部 GSM 无线模块支持外部无线通信)和带虚拟无线通信的 Pocket PC Phone Edition 2003。
图 2:Pocket PC 2003 仿真器
其他内容要点: 仿真器支持驱动器映射
现在,仿真器通过共享文件夹支持模拟存储卡。当文件夹被仿真器共享时,将显示为存储卡,仿真器会将其当作真实的设备来响应。
仿真器支持游戏 API (GAPI)Pocket PC 2003 仿真器图像现在可以支持 GAPI。
新仿真器不能与旧版本并行运行新仿真器(4.2 版)不支持与旧版本并行运行。但是,可以同时运行新仿真器的多个实例。
仿真器支持以太网同步现在,开发人员可以使用 VirtualSwitch 驱动程序和 eMbedded Visual C++ 4.0,实现以太网上与 ActiveSync 同步,而不再需要使用串行端口。
远程配置Windows Powered Smartphone 继承了 Pocket PC 的多种功能,但是配置管理器结构是首次引入 Smartphone 2002 中的。现在,Pocket PC 2003 支持与 Windows Powered Smartphone 2002 相同的配置管理器结构。
处理远程配置的主要组件是设备上的配置管理器。它可以处理所有配置请求,并将这些请求转发到各个配置服务提供程序 (CSP)。一些重要的 CSP 用来处理网络连接、电子邮件设置、安全策略、同步选项和应用程序安装(或删除)。
让我们来看看其中的一种用来处理浏览器收藏夹的 CSP,看如何利用它为 Pocket PC 的 Internet Explorer 添加收藏夹链接。通过向 CSP 提供一个预定的 XML 文件,来对 CSP 进行控制。该文件的示例如下:
该标准 XML 文件包括两个重要部分。第一是安装部分,用来指定一系列安装选项。例如“NoUninstall”选项,它可以防止配置显示在已安装的应用程序列表中(设置/系统/删除程序)。第二部分是实际的 CSP 配置,在这里,我们可以添加至开发人员社区站点的收藏夹链接。收藏夹名称是“Business Anyplace”,指向的 URL 是“http://www.businessanyplace.net”。
有关详细信息,请参阅 SDK 中的 Device Management(设备管理)主题。有关为 Pocket PC 2003 提供的配置服务提供程序 (CSP) 的详细信息,请参阅 SDK 参考部分中的 CSP 文档。
访问配置管理器的方法有多种: 本地配置
本地访问配置管理功能是通过 DMProcessConfigXML 函数来实现的。该函数启用可扩展标记语言 (XML) 数据的提交,该数据会导致移动设备设置的改变。
远程配置Pocket PC 2003 Phone Edition 通过与在 Smartphone 2002 上相同的无线应用协议 (WAP) 推进传输机制和安全性方法来支持远程空中传输 (OTA) 配置。移动设备处理接收到的 OTA 预定 XML 数据。
CAB 规定格式 (CPF)为使设备读取预定的 XML 文件,需要将其命名为 _setup.xml 并打包为压缩文件 (.cab),或 CAB 预定格式 (CPF) 文件,扩展名为 .cpf。相关的命令为:
makecab.exe /D COMPRESS=OFF _setup.xml balink.cpf
现在,有许多方法可以将 CPF 文件 (balink.cpf) 加到设备中。只需要将文件复制到 Pocket PC 中,并点击该文件以启动安装,或者您可以通过空中传输 (OTA) 来提供文件。有多种 OTA 选项,最简单的方法是将文件放到 Web 服务器上,然后在 Pocket PC 的 Internet Explorer 中输入 URL。还可以选择使用 WAP Push,它可以使用短消息服务 (SMS) 消息来启用配置设置推进。
安装应用程序时,也使用 CPF 文件,但是创建该文件的方法截然不同。此时不是使用标准 makecab 实用程序,而是使用 CABWiz 实用程序(在 Smartphone 安装中使用 CABWizSP)。它使用标准安装程序信息文件 (.inf),该文件与创建标准 Pocket PC 安装时所使用的文件类似。
更多信息有关远程配置如何工作的详细信息,请参阅 Pocket PC 2003 SDK 中附带的 Adaptation Kit for Mobile Operators 帮助文件。
更新的浏览器Pocket PC 2003 中包括的 Pocket Internet Explorer 与以前版本相比有很大改进。它支持如 HTML 4.01、XHTML 和级联样式表 (CSS),因此对大多数应用来讲是有效的浏览器用户端。HTML 4.01 是当前的 Web 浏览器标准,CSS 支持将会打开大量现有的,使用这种标准化页面布局的有效方法的站点。日益引人关注的标准(用于提供标准 XML 格式的 HTML 内容)也是一种很好的补充。特别是在向移动电话提供 Web 内容时,XHTML 已作为一种通用的标准。同样,升级到 WML 2.0 也非常受欢迎。WML 2.0 是转换到 XHTML 的主要 WML 1.x 标准,也是通用的移动电话标准。
Microsoft JScript® 支持 (JScript 5.5) 现在已升级到与 Microsoft Internet Explorer 5.5 相同的级别,也就是说与更完整的文档对象模型 (DOM) 组合后,为 Desktop 应用程序编写的多数脚本可以在 Pocket PC 2003 上运行。有关 JScript 不同版本的完整功能概述,请参阅 Version Information(英文)。有关使用 Jscript 的详细文档(包括语言参考、教程和示例),请参阅 Windows Script(英文)。
支持“下一代 Internet”IPv6 可以加速实现所有移动设备使用唯一地址和真正对等通信(甚至是无线通信)的光明前景。如果您还不了解该内容,请参阅 IPv6 page on MSDN(英文)。
在 Pocket PC 2003 中,支持 XML 的方法与在 Internet Explorer 5 中相同。但是,没有 Internet Explorer 4 中的支持向后兼容 XML DOM,也不支持数据绑定。不过,通过 Jscript,XML 可以访问 DOM。
当检测到 Pocket PC 2003 设备正在连接到 Web 站点时,可以查看新代理字符串(在 Internet 信息服务器中,在 HTTP_USER_AGENT 服务器变量中提供):
Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)
有关实现方法的详细信息,请参阅 Make Your Web Applications Support Pocket PC(英文)。
图像支持也有很大改进。PNG、JPEG、GIF、WMBP、2BP 和 BMP 得到内置支持。而且,现在可以使用图像映射和动画 GIF 了。通过可扩展图像库,第三方也可以添加对其他格式的支持。
更多信息有关 Pocket PC 的 Internet Explorer 的详细信息,请参阅 Pocket PC 2003 SDK 中“Writing Application for Pocket PC”(为 Pocket PC 编写应用程序)帮助文件中的“Creating Online Content for Pocket PC”(为 Pocket PC 创建在线内容)一节。
Phone Edition 支持对 Pocket PC Phone Edition 2003 的支持也有较大改进,最明显的例子是能够使应用程序知道传入短消息服务 (SMS) 消息。Pocket PC 2003 SDK 中包含一个名为 MapiRule 的示例,显示了实现方法。该示例是一个 COM 组件,实现 IMailRuleClient 接口。该接口及其方法可以使开发人员对传入消息执行自定义的过滤规则,并在应用程序中进行适当处理。该功能适用于 Pocket PC 2003 和下一代 Smartphone 平台。
让我们来看一下 IMailRuleClient 接口的示例中的 ProcessMessage 方法(参数是 IMsgStore *pMsgStore、ULONG cbMsg、LPENTRYID lpMsg、ULONG cbDestFolder、LPENTRYID lpDestFolder、ULONG *pulEventType、MRCHANDLED *pHandled)的执行过程:
SizedSPropTagArray(1, sptaSubject) = { 1, PR_SUBJECT}; SizedSPropTagArray(1, sptaEmail) = { 1, PR_SENDER_EMAIL_ADDRESS}; ULONG cValues = 0; SPropValue *pspvSubject = NULL; SPropValue *pspvEmail = NULL; IMessage *pMsg = NULL; // 从输入 ID 获取消息 pMsgStore->OpenEntry(cbMsg, lpMsg, NULL, 0, NULL, (LPUNKNOWN *) &pMsg); // 对于 SMS,主题同时也是消息正文 pMsg->GetProps((SPropTagArray *) &sptaSubject, MAPI_UNICODE, &cValues, &pspvSubject); // 获取发送方的地址或电话号码 pMsg->GetProps((SPropTagArray *) &sptaEmail, MAPI_UNICODE, &cValues, &pspvEmail); // 检查消息中的“zzz” if (wcsstr(pspvSubject->Value.lpszW, L"zzz") != NULL) { MessageBox(NULL, pspvSubject->Value.lpszW, pspvEmail->Value.lpszW, MB_OK); // 删除消息,并将其标记为已处理,以便该消息不显示在收件箱中 DeleteMessage(pMsgStore, pMsg, cbMsg, lpMsg, cbDestFolder, lpDestFolder, pulEventType, pHandled); } else // 一个“正常”的消息,通过 *pHandled = MRC_NOT_HANDLED;
首先,检索消息 (pMsg),并从消息中提取主题(pspvSubject、SMS 消息正文)和发送方(pspvEmail、地址或电话号码)。如果消息文字包括“zzz”,将显示消息框,并将消息文字和发送方作为标题。如果是这样,消息还将从收件箱中删除。以上代码段与实际示例相比已进行了简化。
其他功能在本节中,您将看到其他一些改变和新增功能。
改变 COM 对象现在使用自由线程模型 - 所有新 COM 对象(包括 Active X 控件)都应为自由线程以优化其性能。对于以前开发的 COM 对象,不论为何种线程模型均能正常运行,因为 OS 会执行运行时检查以确保使用正确的线程模型。 SIPSTATE 枚举变为其他标头文件 - SIPSTATE 枚举从 aygshell.h 变为 shellapi.h。以前编译的没有 shellapi.h 的代码,现在可能需要包含标头文件了。 不再支持某些 CEMAPI 字符串常数 - 不再支持以前在 cemapi.h 中定义的以下字符串常数:kszCapAmountToFetch、kszCapAttachAmount、kszCapAgeFilter、kszCapSMTPAuthenticate、kszCapMoveToTrash。 新增功能 WAP 推进路由器可扩展性允许自定义对消息的处理 - 应用程序可截取不同类型的 WAP 推进消息,并重新为其分配至不同推进客户端的路由,以通过 pushclient.h 中声明的 PushRouter_xxx 函数自定义处理。使用 Push Router 为通知注册推进客户端,以便在自定义处理的设备上接收特殊类型的推进消息。该功能与 SMS 截取正交。仅 GSM 设备支持该功能,CDMA 设备不支持该功能。 CAB 文件可以用于预定移动设备 - CAB 文件可以用作发送机制以预定 Pocket PC 2003 设备。 L2TP/IPSec VPN 支持 - 该技术允许移动设备将第 2 层隧道协议 (L2TP) 连接和网际协议安全 (IPSec) 一起使用。L2TP 和 IPSec 的组合(即 L2TP/IPSec)对于通过公用网络(例如 Internet)建立远程访问虚拟专用网 (VPN) 的连接,是一种安全性很高的技术。 文件资源管理器支持上下文菜单扩展 - 文件资源管理器现在可以支持已注册文件类型的上下文菜单扩展。它是通过 IContextMenu 界面并添加一些新的注册表项来实现的。 输入窗口的上下文属性是可控制的 - SHSetInputContext 和 SHGetInputContext 函数允许运行时修改和查询输入窗口的上下文属性。这些属性包括是否为字段启用自动更正和自动完成。SHSetInputContext 还支持预定义的上下文类(如“phone”或“e-mail”),这些类包含某些上下文功能的一组特定设置。 通知可强制设备启动 - aygshell.h 中定义了一个新 #define 和 SHNF_DISPLAYON,会在通知被触发时强制打开显示屏。 自动手势识别是可控制的 - commctrl.h 中定义的 NM_RECOGNIZEGESTURE 通知代码为 Pocket PC 2003 应用程序开发人员提供了决定是否在普通控件中利用自动手势识别的能力。 通过配置管理器可以配置更多的电子邮件服务 - 电子邮件配置服务提供程序 (CSP) 允许通过设备的配置管理器结构来配置网际协议电子邮件服务(如 IMAP4 和 POP3)。 可以注册收件箱的“自定义读取”或“组合表单” - cemapi.h 中声明的 IMessageFormEx 和 IFormProviderEx 接口允许开发人员注册与其应用程序需求相匹配的“收件箱读取”或“组合表单”自定义组。这种表单可用于构造 EMS 或 MMS 客户端。 现在支持 IPv6 - 大多数 Pocket PC 2003 API 及组件现在支持 IPv6 类的寻址。IDccManSink2 是一种接收接口,支持 IPv6,用于向客户端应用程序通知设备连接情况。 蓝牙功能更好控制 - bthutil.h 中声明的 BthGetMode 和 BthSetMode 函数提供了查询蓝牙控制面板当前状态的功能,也可以修改其状态(Bluetooth Power Off [蓝牙电源关闭]、Connectable [可连接]、Discoverable [可发现] 等)。 支持 SMS 上的 WAP - Pocket PC 2003 与 Smartphone 一样,支持 SMS 上的 WAP。 小结新 Pocket PC 2003 SDK 包含了为新平台和设备设计和开发移动应用程序所需的所有功能。使用 Visual Studio .NET 和 Visual C# 或 Visual Basic .NET,您可以发挥结构化 .NET 编程的所有优点;通过使用 eMbedded Visual C++ 4.0,您仍然可以创建本机设备应用程序。为 Pocket PC 2002 编写的大多数应用程序仍可在 Pocket PC 2003 设备上运行,这样可保证连续的投资回报。
现在就开始吧,利用 Pocket PC 2003 中的新功能,来丰富您的用户经验,完善您应用程序的功能。下载 Pocket PC 2003 SDK(英文)。
作者:Microsoft 来源:Microsoft
本文地址:http://com.8s8s.com/it/it32527.htm