使用AYGShell实现 CE.NET 和 PPC 外壳兼容性(转)

适用于:

Microsoft Windows CE .NET 4.2

Microsoft Windows Powered Pocket PC 2002

摘要

从 Windows CE .NET 4.2 开始,原始设备制造商可以将对 Pocket PC 2002 外壳的 API 兼容性支持包括在他们基于 Windows CE 的平台中。本文描述通过 AYGShell 公开的 API 以及基于 Pocket PC 2002 的应用程序与基于 Windows CE .NET 4.2 的设备之间的应用程序兼容性。

简介

从 Windows CE .NET 4.2 开始,原始设备制造商可以将对 Microsoft Windows Powered Pocket PC 2002 外壳的应用程序编程接口 (API) 兼容性支持包括在他们基于 Windows CE 的平台中。这些对标准 Windows CE .NET 外壳的扩展称为 AYGShell API。有了 AYGShell 支持,大多数基于 Pocket PC 2002 的应用程序在针对 OEM 的、基于 Windows CE 的平台进行重新编译以后,都可以运行在基于 Windows CE 的设备上。本文描述了通过 AYGShell 公开的 API,以及在基于 Windows Powered Pocket PC 2002 的应用程序与基于 Windows CE .NET 4.2 的设备之间的应用程序兼容性。

应用程序的可移植性有两个级别,第一个级别是二进制兼容性,这是能够采用现有的基于 Pocket PC 2002 的应用程序并在基于 Windows CE .NET 4.2 的设备上运行这些应用程序的能力,第二个级别是源代码级别的可移植性。在某种程度上,源代码级别兼容性是一种应当在开始开发应用程序之前作出的设计/开发决策。

可以下载并运行在基于 Pocket PC 2002 的设备上的、基于 Pocket PC 2002 的应用程序几乎有数百个之多。有关可用软件的列表,请参见 http://www.pocketpc.com。为 Pocket PC 2002 开发的应用程序通常是使用 Microsoft eMbedded Visual C++ 3.0 创建的,该工具生成特定于处理器的二进制程序。所有基于 Pocket PC 2002 的设备都使用 ARM 处理器;因此,要实现二进制应用程序可移植性,基于 Windows CE .NET 4.2 的设备也必须在 ARM 处理器上运行。如果设备使用 x86、MIPS 或 SHx,将至少需要重新编译应用程序源代码,以便与设备的相应处理器类型匹配。当然,只有当您有权访问应用程序的源代码时才有可能这样做。

基于 Pocket PC 2002 的应用程序可以利用特定于设备的 API,例如 GAPI(游戏 API)。利用特定于 Pocket PC 2002 的 API 的应用程序将无法运行在基于 Windows CE .NET 4.2 的设备上,所以,想要同时为 Windows CE .NET 4.2 和 Pocket PC 2002 开发应用程序的应用程序开发人员应当在运行时确定设备类型,并使用适当的 API 调用来利用特定于设备的 API。

应用程序开发人员在开发 eMbedded Visual C++ 应用程序时可以选择使用 Microsoft Win32 或 Microsoft 基础类 (MFC),下面将分别讨论它们的二进制兼容性。

Win32 应用程序

使用 Win32 开发的应用程序能够调用在基于 Pocket PC 2002 或 Windows CE .NET 设备上任何或所有已公开的 API。我们已经知道,如果应用程序调用了某些特定于设备的 API,则这些应用程序不可移植到 Windows CE .NET 4.2。Pocket PC 应用程序往往遵守某些规则;例如,应用程序窗口、对话框和消息框通常是全屏的。应用程序开发人员需要小心地将控件放在应用程序的工作区以内,以便在被激活时,软输入面板 (SIP) 不会隐藏控件。在 Pocket PC 设备上,屏幕的有效区受到限制。硬件设计指南规定,Pocket PC 设备的屏幕必须具有 240 X 320 的分辨率。这一限制不适用于基于 Windows CE .NET 4.2 的设备;因此,应用程序窗口和布局应当适当地进行调整。

为了说明二进制应用程序的可移植性,我们使用 eMbedded Visual C++ 3.0 构建了一个简单的 Win32 应用程序。代码基于 Pocket PC 2002 SDK Win32 应用程序。该应用程序支持 Pocket PC 设备和 Pocket PC 仿真程序。在这里,Windows CE 仿真程序将用来测试应用程序。

下图显示了运行在仿真程序中的 Pocket PC 应用程序。

20051221231943419.gif

1.

您可以使用与 eMbedded Visual C++、Visual Studio .NET 或 Windows CE .NET 开发工具一起安装的 Dumpbin.exe,或 eMbedded Visual C++ 附带的 Depends.exe,来查看应用程序的导入。这将显示应用程序必需的动态链接库 (DLL);大多数 Coredll.dll 导入已经从列表中删除,因为它们对本文并不重要。注意,应用程序还可以通过调用 LoadLibrary 在运行时加载 DLL,Dumpbin 不会列出任何动态加载的 DLL,这意味着基于 Pocket PC 2002 的应用程序可能仍然无法运行在基于 Windows CE .NET 4.2 的设备上。

Dump of file foo.exe
File Type: EXECUTABLE IMAGE
 Section contains the following imports:
    COREDLL.dll
                 13014 Import Address Table
                 1205C Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference
                      Ordinal    95
                      Ordinal    86
    AYGSHELL.dll
                 13000 Import Address Table
                 12048 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference
                      Ordinal    34
                      Ordinal    84
                      Ordinal    83
                      Ordinal    56

注意,基本的 Win32 Pocket PC 应用程序正在从 AYGSHELL.dll 导入四个函数。它们是序号为 34、56、83 和 84 的函数。您可以通过使用 Windows CE .NET 4.2 所附带的共享源代码发现正在导入的是哪些函数。DLL 函数是通过项目 .def 文件导出的,从 aygshell.def 摘录的如下代码描述了这个过程。它显示了 Win32 应用程序正在调用 SHCreateMenuBar、SHInitDialog、SHHandleWMSettingChange 和 SHHandleWMActivate。

C:WINCE420PUBLICSHELLSDKOAKLIBARMV4DEBUGaygshell.def
; AYGShell.def
LIBRARY     AYGSHELL
EXPORTS
    SHCreateMenuBar             @34
    SHInitDialog                @56
    SHHandleWMSettingChange     @83     NONAME
    SHHandleWMActivate          @84     NONAME

为了测试二进制应用程序的可移植性,我们构建了一个 Windows CE .NET 4.2 调试操作系统映像。该映像基于 Internet 家电平台配置。我们可以使用 Remote File Viewer 应用程序将基于 Pocket PC 2002 的应用程序上载到正在运行的操作系统映像。您可以通过 Windows CE .NET 资源管理器外壳程序来执行这个应用程序;有趣的是,应用程序运行失败。可以使用 Platform Builder 内的调试输出窗口来确定失败原因。下面是 Platform Builder 的输出。

0x83e0d800: DoImport Failed! Unable to import Library 'AYGSHELL.dll' for 'Foo.exe'
0x83e0d800: CreateNewProc failure on Foo.exe!

调试输出显示,由于没有在设备上找到 AYGSHELL.dll,应用程序未能启动。Windows CE .NET 将 AYGShell 作为组件附带在 Platform Builder 编录中。作为系统创建者,您需要决定是否要为您的平台添加 AYGShell 支持;Platform Builder 报告 AYGShell 使平台增大了大约 58 KB。可以通过从编录中添加 AYGShell 组件或设置 SYSGEN_AYGSHELL sysgen 变量,将AYGShell 支持添加到平台。

将 AYGShell 支持添加到 Windows CE .NET 4.2 平台之后,应用程序将按照期望的那样运行。下面是运行在 Windows CE .NET 4.2 仿真程序中的相同的二进制应用程序。注意,应用程序菜单显示在屏幕底部。这当然是 Pocket PC 应用程序的默认行为。

20051221231943796.gif

2.

使用 Platform Builder Dependency Information(右键单击组件,然后单击 Dependencies)。如果将任何以下组件包括到平台中,可以看到 AYGShell 将被添加到平台:Help、Microsoft Pocket Internet Explorer、Standard SDK for Windows CE .NET 和 Pocket Internet Explorer HTML View。

20051221231943285.gif

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126739/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-126739/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值