欢迎来到“工具包”专栏的第一期。在每一期中,我都会深入挖掘一些最知名(以及一些最不为人知)的开发工具,剖析其友好的市场外表和功能丰富的外壳,试图将核心应用程序与产品规格表区分开来。
本月,我们将深入探讨微软的 .NET Compact Framework (CF),微软将其誉为创建针对移动设备软件应用程序的完美平台。 这在某种程度上是准确的,但也不完全是。
.NET CF 于 2003 年 3 月发布,迅速成为 Pocket PC 的事实平台,到年底将成为智能手机的事实平台。(在这里,我们使用 Pocket PC 和智能手机是微软特有的含义——品牌平台通常由围绕 Windows CE 的代码库提供支持——而不是通用的个人数字助理和“两个词”智能手机的含义。)
这非常直白。但潜在的 CF 开发人员很快就会发现,在充满信心地进行实际软件开发之前,必须吸收大量令人困惑的微软首字母缩略词和产品名称。
例如,以 CF 别名本身为例。在微软内部,它经常被当作集成开发环境 (IDE) 的同义词来使用,以区别于映射到桌面应用程序的完整 .NET Framework。 严格来说,.NET CF 甚至不是一个工具。相反,它是一个通用语言运行时和一组针对智能设备优化的类库。它确实是一个平台,因为它驻留在目标设备上,内存占用为 1.5 MB 的 ROM。
用于开发在配备 .NET CF 的设备上运行的应用程序的工具是微软的 Visual Studio .NET IDE。(同一个 Visual Studio IDE 用于为完整框架和 CF 构建应用程序,这也是很难将微软的工具与其平台以及彼此区分开来的原因之一,除非使用软件记分卡。)
为了帮助我,我致电了微软负责 CF 的负责人 Jonathan Wells。“一开始选择正确的工具确实令人困惑,”Wells 承认。“但是一旦开发人员进入这个领域,这个问题就不那么突出了。我在市场上发现,人们会倾向于 CF 和 Visual Studio .NET,你可以将它们视为一回事。”他继续澄清了框架。
开发人员必须处理的其他数据包括关于 CF 支持的目标平台的众多限定条件。例如,支持针对最新版本的 Windows CE(版本 4.1 和 4.2)的嵌入式应用程序。 CF 本身也内置于配备 Windows Mobile Software for Pocket PC 2003 的最新 Pocket PC 中(这是微软从 2003 版本开始用于 Pocket PC 系统软件包的新命名约定)。由于 CF 仅在 2003 年才面世,因此早期的 Pocket PC 2000 和 Pocket PC 2002 设备没有 CF 运行时。必须将其添加到 RAM 中才能使基于 CF 的应用程序运行。此外,Smartphone 2002 根本不支持 .NET CF,尽管 Smartphone 2003 将会支持。
为了理解全局,最好了解微软工具在整个嵌入式领域中的地位。 .NET CF 如此引人注目的一个重要原因是,它与 CE 4.1 和 4.2 操作系统一起,标志着微软在嵌入式领域获得认真对待的十年努力的顶峰。
从 1991 年发布模块化 Windows 开始,微软在进入嵌入式市场方面做了几次错误的尝试,每次都被大多数经验丰富的嵌入式开发人员拒绝后,都灰溜溜地回到雷德蒙德舔舐伤口。
但在 1996 年 Windows CE 3.0 上市后,微软开始获得发展势头。随着 2001 年初大幅改进的 Windows CE .NET(又名 4.1)的推出,势头更加强劲。
在这种成功中不可低估的是,大约在那个时候,第一代软件开发人员从大学毕业,他们几乎完全是在微软产品中成长起来的。作为新晋专业人士,这些开发人员将他们对 Windows 的偏爱带入商业世界,进一步推动了 Windows 的采用。
新千年的管理者接受 Windows 还有另一个原因:微软重新定义了嵌入式供应商可以为其工具收取的价格。作为首批提供价格低于 1,000 美元的完整嵌入式开发环境的公司之一,微软一举抽走了传统嵌入式公司的底牌,这些公司习惯于每个席位收取 20,000 美元。
那些老牌供应商——如 Wind River、QNX、Lynx(现在的 Lynuxworks)、Microtech Research(后来被 Mentor 收购)和 Integrated Systems(2000 年被 Wind River 收购)——需要这些高价位来资助其工具的创建。相比之下,微软的嵌入式工具工作基本上是公司主要关注的桌面工作的补贴性副产品。这里有一个有趣的历史:当涉及到 Visual Studio .NET IDE 时,补贴类比尤其适用,其主要目标是桌面开发人员。当涉及到嵌入式 Windows CE 本身时,只有当微软最终切断与桌面 Windows 的联系,并为 CE 4.1 开发了一个全新的代码库(这个过程花费了近五年时间)时,该操作系统才获得了真正的信誉。
关于编程语言,微软工具故事中隐含的战略决策是鼓励开发人员转向其自主开发的 C# 语言。微软将 C# 定位为比更成熟的 C++ 语言更易于使用,并且更适合嵌入式设备。
使用 Visual Studio .NET 作为其 IDE 来构建 CF 应用程序的开发人员可以选择 C# 或 Visual Basic。 然而,那些希望坚持使用 C++ 的人必须使用微软的嵌入式 Visual C++ 工具。 后者虽然功能强大,但与 Visual Studio .NET 相比,需要更多的开发人员干预才能创建一个完全成型的 CF 应用程序。
开发人员也可以采取混合方法,将大部分工作基于 C#,但在需要更高性能代码时跳转到 C++。
C++ 与高性能有什么关系?这可能只是一个老手会问的问题,因为在过去的几十年里,当需要快速代码时使用汇编语言,而 C++ 被认为是慢速方法。 好吧,Visual Studio .NET 会自动处理内存分配和释放问题,而这在 C++ 中是手动完成的。 这给 C# 代码增加了很多开销。
因此,当接近实时的考虑因素出现,并且开发人员需要深入应用程序内部并优化其某些代码时,Visual Studio .NET 允许开发人员通过插入手动调整的 C++ 代码(使用嵌入式 Visual C++ 开发)来做到这一点,然后在响应速度降回毫秒级范围之外时跳回 C#。
当然,正如 Wells 提醒我的那样,Pocket PC 通常不需要实时执行。但是,如果您处理的是嵌入式航空电子设备或机械控制,则实时要求就发挥作用了。 Windows CE 通常不会在航空电子设备中看到应用,尽管它在工厂车间中使用。在 PDA 领域,我自己的非正式调查表明,业务应用程序的开发人员将采用直接的 CF 方法,而游戏开发人员将坚持使用 C++。
在操作中,Visual Studio .NET 和 CF 以相当标准的方式协同工作。 Visual Studio.NET 用于创建 CF 应用程序,以典型的拖放方式操作。 IDE 还配备了网络 API 和对 Web 服务的支持。
CF 提供了托管执行环境,可防止内存泄漏。 还包括一个即时编译器,它将编译后的 CF 应用程序转换为目标设备的本机代码。
当应用程序准备好进行测试时,IDE 可以运行模拟器或将可执行文件部署到目标设备。在前一种情况下,x86 虚拟机在 Windows CE 下运行。在后一种情况下,代码通过连接到计算机的 ActiveSync 同步座下载到 Pocket PC 或其他硬件设备。
为了了解可以为 CF 创建的代码,我联系了 Peter Foot,他是微软“Windows 嵌入式最有价值专家”(该公司授予尖端开发人员的荣誉称号)和英国软件咨询公司 InTheHand 的所有者。
Foot 在开发用于 Pocket PC 的多媒体“现场指南”软件(观鸟者请注意!)时,汇集了一系列面向数据的 CF 组件(见图 1)。
[C#] using System; using System.Runtime.InteropServices;
namespace InTheHand { public class Sound { public static void Play(String FileName) { int hResult = PlaySoundW(FileName,0,0); } //playsound [ DllImport(“coredll.dll”, EntryPoint=“PlaySoundW”) ] private extern static int PlaySoundW(String lpszName, int hModule, int dwFlags); { {
您可以在 Open NETCF (http://www.opennetcf.org/) 上试用许多 CF 组件,这是一个开源项目,其创始人将其称为“在开源运动精神下工作的 Compact Framework 开发信息的独立来源”。
Open NETCF 网站上发布的源代码和二进制文件包括一个注册表库模块,该模块提供从 .NET CF 代码对系统注册表的读/写访问。 另一段代码,称为桌面通信库,包含用于通过微软的远程 API 在 PC 和 Windows CE 设备之间进行通信的类。 Open NETCF 上提供的 Windows.Forms 库包含现有 Compact Framework 控件的替换控件(按钮、剪贴板和 HTML 查看器),以及新控件。
在本期 Queue 付印时,微软发布了适用于 Windows Mobile 2003 智能手机的软件开发工具包。 SDK 使开发人员能够利用 .NET Compact Framework 为智能手机构建应用程序。 该免费下载可从微软网站获得 (http://www.msdn.microsoft.com/library/default.asp?url=/downloads/list/mobilesmart.asp)
亚历山大·沃尔夫 获得了纽约市库珀联盟学院的电气工程学位。 他是一位居住在纽约州森林小丘的科学作家,曾为 IEEE Spectrum、EE Times、Embedded Systems Programming 和 Byte.com 撰稿。
Microsoft 智能设备开发人员社区 http://smartdevices.microsoftdev.com
.NET Compact Framework 1.0 SP1 可再发行组件下载
http://microsoft.com/downloads/
Fergus, D., 和 Roof, L. 《.NET Compact Framework 权威指南》。 Apress,加利福尼亚州,2003 年。
http://www.apress.com/
来自 Peter Foot 的 InTheHand 支持论坛的 .NET CF 代码示例 http://www.inthehand.com
OpenNETCF 资源站点 http://www.opennetcf.org/
最初发表于 Queue 第 1 卷,第 7 期—
在 数字图书馆 中评论本文