软件产品的多平台支持已经成为一种趋势,许多企业正在考虑或者已经开始对其已有软件实施多平台支持。为此,移植通常是首先想到的方法。我们的项目实践也证明,移植这一方法,无论是在资源、成本方面,还是在进入市场及时性等方面,与选择在目标平台上重新设计和实现相同功能的软件相比,都是一种更为可行的方法。.
但是,多数软件产品在开发初期,由于各种限制,设计者并没有从架构及实现上考虑程序的可移植性,从而导致平台的依赖性较强,用户界面和事务逻辑的分离不够完善,因此在技术上给移植带来了极大的困难。尤其是桌面应用程序,由于系统模型和函数接口本身差异很大,平台依赖更加紧密。
本书以一个GUI C++桌面应用程序移植为背景,以Windows为源平台,目前活跃的桌面平台Linux作为目标平台,介绍一种统一的基于应用程序接口(API)的源平台到目标平台的移植方法及其实现过程。本书称这种方法为API模拟方法。和一般的对于某个特定应用的移植过程不同,这种方法使得所有的Windows应用程序的移植过程变得简单划一,解决了移植通常所面临的平台依赖性,克服了用户界面和逻辑事务不清晰所带来的困难,所以它为所有具有图形用户界面的Windows程序的移植提供了一个统一的解决方案。
API模拟方法,就是在目标平台上实现一套源平台所用的API。在本书中,我们特指,为了移植Windows GUI应用程序到Linux,而在Linux上实现的一个用来模拟Win32 API的抽象层。在本书中,又把这一抽象层称为“API模拟层”。这样,源代码的业务逻辑部分就不需要做任何改动,而一旦所有的用户界面程序使用的Windows API在目标平台上被模拟,并且以动态链接库的形式提供出来,理论上,则所有Windows用户界面程序的移植就已完成。
值得提及的是,尽管这种基于模拟API的方法在思路上非常清晰,但是,由于源代码设计和实现技术水平的差异,API模拟的方法在实际实现中会遇到各种各样的困难。所以本书在描述这种方法和实现的同时,处处不忘记就API移植所涉及到的源系统和目标系统的特性和差别进行深入剖析和探讨。同时,本书还为读者展现了两个系统有关用户界面交互和图形输出基本逻辑结构的一些鲜为人知的特性。本书将为读者深入理解Windows系统和Linux系统下的图形用户接口程序设计和编程实现差异提供具有价值的指南。
本书特色
不同于通常的移植方面的图书(尽管不多,但读者还是可以在Amazon.com上查到一些,比如“Unix To Linux Porting: A Comprehensive Reference”,AlFredo-Mendoza, Chakarat- Skawratananond, Artis-Walker),这些图书主要介绍移植过程,包括从获取源代码、编译、链接到调试。本书对这些过程在Linux上的特殊性进行了描述,而重点是介绍这种统一的、针对GUI应用程序的基于API模拟的移植框架和具体实现。
不仅如此,由于源平台和目标平台,即Windows和Linux平台,编程模型的不同,移植工作会遇到许多挑战和困难。本书对此进行了充分的分析和说明,并提出了很多行之有效的解决方案,这将是读者可以从本书中获得的另外一个巨大收获。..
同时,书中还结合大量的例子程序,使读者能够快速理解不同方法的实现原理和具体的应用。最后,本书还给出了一个完整的Windows应用程序,读者可以利用书中所介绍的方法和实现,自行实施一个精巧而完整的从Windows到Linux的应用移植过程,从而真正掌握这种方法,并将其立刻应用到实际项目之中。
本书作者们具有多年大型应用程序移植经验,书中无处不渗透着作者们对应用移植、Windows、Linux系统的深刻理解、独特见解,以及高级的程序设计和编程技巧,所以,无论程序员还是架构师都可以从中受益。
本书的读者对象
本书的读者对象是具有相当基础的软件开发人员、高年级计算机或相关领域的学生,以及那些可能需要为企业决策者提供技术和信息支持的架构师。由于本书是以GUI应用程序为背景来讲述的,所以对于任何在Windows和Linux系统之一进行应用程序开发或移植工作的工程师,以及任何C/C++程序员和工程师,都是一本具有较高参考价值的图书。我们期望本书能够成为一盏为读者在艰辛的移植或开发工作中照亮黑暗的明灯。
本书组织
本书介绍的是通过模拟Windows子系统实现的方法,描述的模拟层的设计结构也同Windows的子系统相似。为了清楚地描述这一模拟实现的过程,本书的叙述方式,以及目录和章节标题的组织,也是按照相近的分类来进行的,所以读者看到的目录和章节的标题,更像是一本讲述Windows编程的书。而事实上,其中讲述的是在Linux上的实现,以及平台之间的差异比较。
全书分为12章来讲述。
“第1章 移植架构”,介绍了模拟API方法的设计思想、总体框架、组成部分及各组成部分之间的相互关系。同时,许多贯穿全书的重要概念,在本章中也给出了定义和阐述,包括Windows和Linux平台之间的典型差异,X窗口系统(X Window System,简称X)的编程提示。
“第2章 GDI子系统”,“第3章 文本输出和字体管理”,“第9章 打印”讲述了API模拟架构中基础的GDI模拟子系统及其输出设备的设计和实现,“第4章 窗口子系统”,“第5章 消息子系统”,“第6章 用户输入”,“第7章 剪贴板和拖放”深入探讨了模拟层底层服务,并揭示了许多关键技术及其难点的解决方法。
“第8章 标准控件、菜单与对话框”讲述的是USER子系统中建立在底层服务之上的几个关键组件的设计与实现。
“第10章 Unicode与国际化”,“第11章 国际化输入”是国际化软件必不可少的组成部分。在模拟层中其实现分布在GDI和USER子系统之中。但从国际化意义上看又有相对独立性,所以单独提出来讲述。
“第12章 资源的移植”描述了大型GUI应用程序移植的一个重要环节——资源的移植。其中描述了有关资源移植的过程及经验。
.致谢
本书是集体创作的结晶,在此感谢大家出色的协作精神。本书的写作也占用了大家大量的休息、娱乐,以及和家人在一起的时间,所以在此感谢作者们家人的理解和支持。同时,成书的过程与许多人的关怀、鼓励和支持密不可分,其中包括CDL总裁Josephine,律师Andrew,Director Dennis,资深经理Debbi 和Cindy,等等,在此表示感谢。最后,特别感谢出版社的有关领导、协调人员及编辑,有了他们的支持和参与,本书得以顺利出版。
由于时间仓促、水平有限,书中难免有许多不妥,甚至错误之处。在此敬请读者不吝指出,我们将愿意与读者共同探讨,并不胜感激。...
作 者
2007年1月