Kylix是业界享有盛誉的工具软件开发公司Borland推出的Linux环境下的开发工具,是将Delphi移植到Linux环境的结果,它包含了Delphi for Windows的大部分功能。本书旨在让经验丰富的程序员快速地了解并掌握Kylix,从而降低开发Linux应用程序难度,并提高开发速度。\r\n\r\n 全书分五部分,共21章。第一部分简要地介绍了Object Pascal和Kylix IDE,为读者使用Kylix进行开发工作打好了基础,其中包括Pascal的基本语法、循环、分支、操作符和递归、对象和接口以及Kylix的可视化开发工具、代码编辑工具和调试工具;第二部分介绍了CLX,包括CLX的体系结构、代码共享和重用、创建组件以及绘制图形等内容;第三部分介绍了Linux系统编程,包括控制台应用程序、内存管理、文件I/O以及进程和线程等;第四部分介绍了数据库开发,包括DataCLX、数据-感知组件、数据访问层、数据库优化等内容;第五部分介绍了Web开发,包括Apache Web服务器应用程序和Web服务器开发等内容。\r\n\r\n 本书以简单易懂的方式全面阐述了Kylix中所有主要的开发技术,并通过范例程序提供了大量的代码,可供中高级程序员学习使用Kylix进行Linux应用程序开发时参考。\r\n
\r\n
第一部分 了解Delphi和Linux 1 \r\n\r\n 第1章 可视化开发 2 \r\n\r\n 1.1 Kylix IDE 2 \r\n\r\n 1.1.1 本章内容简介 2 \r\n\r\n 1.1.2 IDE概述 3 \r\n\r\n 1.2 菜单 3 \r\n\r\n 1.2.1 菜单快捷键 4 \r\n\r\n 1.2.2 快捷菜单 4 \r\n\r\n 1.2.3 向菜单中添加新工具 4 \r\n\r\n 1.2.4 工具栏 5 \r\n\r\n 1.3 可视化开发 6 \r\n\r\n 1.3.1 组件面板 7 \r\n\r\n 1.3.2 软件包 8 \r\n\r\n 1.3.3 使用Kylix窗体设计器 9 \r\n\r\n 1.3.4 排列组件 9 \r\n\r\n 1.3.5 对象查看器 10 \r\n\r\n 1.3.6 配置对象查看器 11 \r\n\r\n 1.3.7 编辑xfm文件 11 \r\n\r\n 1.3.8 Constraints和Anchors 13 \r\n\r\n 1.3.9 Tab顺序 14 \r\n\r\n 1.3.10 对象查看器和事件 14 \r\n\r\n 1.4 Kylix单元的源代码 14 \r\n\r\n 1.4.1 Kylix单元的接口 15 \r\n\r\n 1.4.2 Kylix单元的实现 17 \r\n\r\n 1.4.3 FormCreate方法哪里去了 18 \r\n\r\n 1.5 Pascal源文件 18 \r\n\r\n 1.5.1 Delphi工程文件 19 \r\n\r\n 1.5.2 单元 19 \r\n\r\n 1.5.3 Pascal程序的入口 20 \r\n\r\n 1.5.4 uses 子句和循环单元引用 20 \r\n\r\n 1.6 Kylix中的编译阶段 22 \r\n\r\n 1.7 使用容器 22 \r\n\r\n 1.7.1 PannelDesign程序 24 \r\n\r\n 1.8 本章小结 30 \r\n\r\n 第2章 循环. 分支. 运算符和递归 31 \r\n\r\n 2.1 术语定义:语句和表达式 31 \r\n\r\n 2.1.1 表达式 31 \r\n\r\n 2.1.2 语句 31 \r\n\r\n 2.2 if 语句 32 \r\n\r\n 2.3 Case 语句 34 \r\n\r\n 2.4 for 循环 35 \r\n\r\n 2.5 While语句 37 \r\n\r\n 2.6 repeat语句 39 \r\n\r\n 2.6.1 循环和分支小结 40 \r\n\r\n 2.7 运算符简介 41 \r\n\r\n 2.7.1 赋值运算符 41 \r\n\r\n 2.7.2 除法运算符 41 \r\n\r\n 2.7.3 布尔和逻辑运算符 42 \r\n\r\n 2.7.4 关系运算符 42 \r\n\r\n 2.7.5 获取变量的地址 43 \r\n\r\n 2.7.6 执行字符串和指针运算的运算符 43 \r\n\r\n 2.7.7 关于运算符的最后说明 44 \r\n\r\n 2.8 递归 44 \r\n\r\n 2.8.1 阶乘 44 \r\n\r\n 2.8.2 Fibonacci数 45 \r\n\r\n 2.8.3 递归绘图 47 \r\n\r\n 2.9 本章小结 48 \r\n\r\n 第3章 Pascal基本语法 49 \r\n\r\n 3.1 本章内容 49 \r\n\r\n 3.2 整型和浮点型 49 \r\n\r\n 3.2.1 序数类型 50 \r\n\r\n 3.2.2 使用序数的Pascal函数 51 \r\n\r\n 3.2.3 枚举类型 53 \r\n\r\n 3.2.4 浮点型 54 \r\n\r\n 3.3 Pascal字符串 58 \r\n\r\n 3.3.1 ShortStrings 59 \r\n\r\n 3.3.2 AnsiString 59 \r\n\r\n 3.3.3 PChar 61 \r\n\r\n 3.3.4 WideString 62 \r\n\r\n 3.4 强制类型转换 62 \r\n\r\n 3.4.1 as. is运算符和Sender参数 63 \r\n\r\n 3.5 数组 64 \r\n\r\n 3.5.1 数组常量 65 \r\n\r\n 3.5.2 动态数组和对象数组 65 \r\n\r\n 3.5.3 调试数组:启用范围检查功能 68 \r\n\r\n 3.6 记录 69 \r\n\r\n 3.6.1 记录和with语句 69 \r\n\r\n 3.6.2 Variant记录 70 \r\n\r\n 3.7 指针 73 \r\n\r\n 3.7.1 使用指向对象的指针 74 \r\n\r\n 3.7.2 指针. 构造函数和析构函数 76 \r\n\r\n 3.7.3 虚拟方法和override编译指令 77 \r\n\r\n 3.8 Object Pascal没有的特性 77 \r\n\r\n 3.9 本章小结 77 \r\n\r\n 第4章 对象和接口 79 \r\n\r\n 4.1 Kylix的对象模型 79 \r\n\r\n 4.1.1 在哪里声明对象 79 \r\n\r\n 4.1.2 Object Pascal类的作用域规则 81 \r\n\r\n 4.1.3 互相引用对方的类的作用域问题 81 \r\n\r\n 4.1.4 声明方法 82 \r\n\r\n 4.1.5 Object Pascal的继承模型:virtual和override 82 \r\n\r\n 4.1.6 在声明中使用dynamic而不是virtual 83 \r\n\r\n 4.1.7 调用覆盖方法的祖先:inherited 85 \r\n\r\n 4.1.8 abstract编译指令 86 \r\n\r\n 4.1.9 overload编译指令 87 \r\n\r\n 4.1.10 类实例的实例化和释放 87 \r\n\r\n 4.1.11 类方法 88 \r\n\r\n 4.2 接口 88 \r\n\r\n 4.2.1 接口类型 89 \r\n\r\n 4.2.2 接口不是类 89 \r\n\r\n 4.2.3 不能直接实现接口 90 \r\n\r\n 4.2.4 用类来实现接口 90 \r\n\r\n 4.2.5 调用接口的方法 93 \r\n\r\n 4.2.6 释放接口 94 \r\n\r\n 4.2.7 一个对象的多个接口 95 \r\n\r\n 4.2.8 方法解析子句 98 \r\n\r\n 4.2.9 IInterface的声明 99 \r\n\r\n 4.2.10 接口的实质 101 \r\n\r\n 4.2.11 使用接口的理由 102 \r\n\r\n 4.2.12 维护和更新接口 103 \r\n\r\n 4.3 Variant 104 \r\n\r\n 4.4 RTTI和浮点类型 109 \r\n\r\n 4.5 框 架 114 \r\n\r\n 4.5.1 创建框架 114 \r\n\r\n 4.5.2 重用框架 116 \r\n\r\n 4.6 命令行编译器 117 \r\n\r\n 4.7 本章小结 117 \r\n\r\n 第5章 编辑器和调试器 118 \r\n\r\n 5.1 源代码编辑器 118 \r\n\r\n 5.2 编辑器和设计器 118 \r\n\r\n 5.2.1 在编辑器中影响可视化工具 119 \r\n\r\n 5.3 工程管理器 121 \r\n\r\n 5.3.1 代码浏览器 122 \r\n\r\n 5.3.2 定制代码浏览器的外观 124 \r\n\r\n 5.3.3 代码生成:在编辑器和浏览器中完成类 125 \r\n\r\n 5.4 浏览器 129 \r\n\r\n 5.5 To-Do列表 130 \r\n\r\n 5.5.1 工具窗口 132 \r\n\r\n 5.5.2 保存桌面和调试桌面 133 \r\n\r\n 5.6 神奇工具:Code Insight 133 \r\n\r\n 5.6.1 代码完成化(Code Completion)的奇迹 133 \r\n\r\n 5.6.2 Parameter Insight的奇迹 134 \r\n\r\n 5.6.3 Code Insight:浏览源代码 135 \r\n\r\n 5.6.4 代码模板将使您成为世界上最快的打字员 136 \r\n\r\n 5.7 使用调试器 137 \r\n\r\n 5.7.1 使用调试器单步调试代码 138 \r\n\r\n 5.7.2 调试器不能单步调试的代码:优化 139 \r\n\r\n 5.7.3 不能单步调试的代码:链接器 140 \r\n\r\n 5.7.4 在Watch List窗口监视代码 140 \r\n\r\n 5.7.5 查看变量 140 \r\n\r\n 5.7.6 使用断点 141 \r\n\r\n 5.8 使用异常来清理代码 142 \r\n\r\n 5.8.1 声明自己的异常类 144 \r\n\r\n 5.8.2 finally子句和再次引发异常 144 \r\n\r\n 5.8.3 在调试器中使用CPU窗口 145 \r\n\r\n 5.8.4 在线帮助 146 \r\n\r\n 5.9 ElfDebug服务器 147 \r\n\r\n 5.9.1 ElfDebugHelp单元提供的服务 155 \r\n\r\n 5.9.2 DebugHelp单元的输出 156 \r\n\r\n 5.9.3 向文本文件发送信息 157 \r\n\r\n 5.9.4 向HTTP服务器发送信息 158 \r\n\r\n 5.9.5 在服务器端接收信息 159 \r\n\r\n 5.9.6 所有者绘制的列表框 159 \r\n\r\n 5.10 本章小结 160 \r\n\r\n 第6章 理解Linux环境 161 \r\n\r\n 6.1 Linux环境概貌 161 \r\n\r\n 6.2 Linux桌面 162 \r\n\r\n 6.2.1 桌面分析 162 \r\n\r\n 6.3 X体系结构概述 163 \r\n\r\n 6.3.1 X的历史 163 \r\n\r\n 6.3.2 名称X Window系统 164 \r\n\r\n 6.3.3 X Window系统简介 164 \r\n\r\n 6.3.4 网络和X客户/服务器模型 164 \r\n\r\n 6.3.5 X服务器和X客户之间的细管道 164 \r\n\r\n 6.3.6 连接到远程服务器 165 \r\n\r\n 6.4 使用Kylix进行X编程 165 \r\n\r\n 6.4.1 X中的'Hello,World'程序 167 \r\n\r\n 6.4.2 使用XCreatWindow创建主窗口 172 \r\n\r\n 6.4.3 层叠顺序 176 \r\n\r\n 6.4.4 创建图形场境 177 \r\n\r\n 6.4.5 事件循环 177 \r\n\r\n 6.4.6 X编程小结 179 \r\n\r\n 6.5 窗口管理器 179 \r\n\r\n 6.5.1 为何创建窗口管理器 179 \r\n\r\n 6.5.2 窗口管理器的强大功能 179 \r\n\r\n 6.5.3 修改和查询窗口管理器 180 \r\n\r\n 6.6 X工具包 180 \r\n\r\n 6.6.1 控件. 组件和部件 180 \r\n\r\n 6.7 桌面简介 181 \r\n\r\n 6.7.1 KDE桌面 181 \r\n\r\n 6.7.2 GNOME桌面 181 \r\n\r\n 6.8 本章小结 181 \r\n\r\n 第二部分 CLX 183 \r\n\r\n 第7章 CLX体系结构和可视化开发 184 \r\n\r\n 7.1 Qt和CLX 184 \r\n\r\n 7.1.1 FreeCLX 187 \r\n\r\n 7.2 Qt和事件 187 \r\n\r\n 7.2.1 难以理解的CLX消息 188 \r\n\r\n 7.2.2 Qt信号和槽口 189 \r\n\r\n 7.2.3 Qt应用程序对象和事件循环 191 \r\n\r\n 7.2.4 在Object Pascal中调用Qt代码 191 \r\n\r\n 7.3 使用CLX编写的Slider程序 192 \r\n\r\n 7.4 CLX. Qt和Hook对象 193 \r\n\r\n 7.4.1 CLX的不足之处:EventFilter Mojo 196 \r\n\r\n 7.5 使用样式 200 \r\n\r\n 7.6 使用资源 202 \r\n\r\n 7.6.1 字符串资源 203 \r\n\r\n 7.7 创建非矩形窗体 203 \r\n\r\n 7.7.1 窗体继承 204 \r\n\r\n 7.7.2 覆盖Widget的初始值 205 \r\n\r\n 7.7.3 绘制窗体的外形 209 \r\n\r\n 7.8 本章小结 210 \r\n\r\n 第8章 代码的包装和共享 211 \r\n\r\n 8.1 组件理论 211 \r\n\r\n 8.2 从已有的组件派生出新的组件 212 \r\n\r\n 8.2.1 保存工作 215 \r\n\r\n 8.2.2 定义组件的特性 216 \r\n\r\n 8.2.3 测试组件 217 \r\n\r\n 8.3 软件包:将组件放置到组件面板中 218 \r\n\r\n 8.3.1 软件包简介 218 \r\n\r\n 8.3.2 软件包和LD_LIBRARY_PATH 218 \r\n\r\n 8.3.3 软件包和组件面板 220 \r\n\r\n 8.4 创建软件包 220 \r\n\r\n 8.4.1 设计阶段软件包和运行阶段软件包 221 \r\n\r\n 8.4.2 图标:使用DCR文件 222 \r\n\r\n 8.4.3 同时打开软件包和工程 222 \r\n\r\n 8.4.4 requires子句 222 \r\n\r\n 8.4.5 注册组件 223 \r\n\r\n 8.5 运行阶段软件包 223 \r\n\r\n 8.6 在运行阶段进入软件包 226 \r\n\r\n 8.7 创建共享对象 226 \r\n\r\n 8.7.1 在Kylix程序中调用库中的例程 229 \r\n\r\n 8.8 动态加载共享对象 229 \r\n\r\n 8.9 本章小结 230 \r\n\r\n 第9章 创建组件 231 \r\n\r\n 9.1 使用消息 231 \r\n\r\n 9.1.1 简单消息:一个有用的控件 231 \r\n\r\n 9.1.2 响应消息 233 \r\n\r\n 9.1.3 在组件中使用FilteEvents 234 \r\n\r\n 9.2 扩展Elves单元 236 \r\n\r\n 9.2.1 为CLX组件命名的艺术 245 \r\n\r\n 9.2.2 TElfBigEdit控件和TElfEmtptyPanel控件 245 \r\n\r\n 9.2.3 创建复合组件 246 \r\n\r\n 9.2.4 为组件创建published属性 248 \r\n\r\n 9.2.5 导出属性 249 \r\n\r\n 9.3 另一个复合组件 249 \r\n\r\n 9.4 创建一个由TLabel和TEdit组成的组件 254 \r\n\r\n 9.4.1 改变标签的位置 262 \r\n\r\n 9.4.2 ElfLabelEdit及其与Windows的兼容性 263 \r\n\r\n 9.4.3 3D文本标签 263 \r\n\r\n 9.5 本章小结 264 \r\n\r\n 第10章 高级组件设计技术 266 \r\n\r\n 10.1 属性 266 \r\n\r\n 10.1.1 声明属性 267 \r\n\r\n 10.1.2 在对象查看器中查看属性 269 \r\n\r\n 10.2 再谈属性 269 \r\n\r\n 10.3 从空白开始创建组件 276 \r\n\r\n 10.4 Clock组件 278 \r\n\r\n 10.4.1 理解TElfClock 283 \r\n\r\n 10.4.2 Clock Paint方法: 284 \r\n\r\n 10.4.3 TElfColorClock组件 284 \r\n\r\n 10.4.4 创建别致的时钟 285 \r\n\r\n 10.5 为组件创建图标 287 \r\n\r\n 10.6 Tools API:属性编辑器和组件编辑器 288 \r\n\r\n 10.6.1 设计阶段代码和运行阶段代码之比较 292 \r\n\r\n 10.6.2 Kylix中的Tools API 293 \r\n\r\n 10.6.3 Tools API和Wine 293 \r\n\r\n 10.6.4 Tools API和接口 293 \r\n\r\n 10.6.5 属性编辑器 293 \r\n\r\n 10.6.6 再谈注册组件和组件编辑器 297 \r\n\r\n 10.6.7 组件编辑器 298 \r\n\r\n 10.6.8 关于组件维护的一些说明 299 \r\n\r\n 10.7 组件模板 299 \r\n\r\n 10.8 本章小结 300 \r\n\r\n 第11章 图形 301 \r\n\r\n 11.1 QGraphics.pas中的主要对象 301 \r\n\r\n 11.2 TCanvas对象 301 \r\n\r\n 11.3 使用Qt绘图 303 \r\n\r\n 11.3.1 改变坐标系 304 \r\n\r\n 11.4 TColor类型 305 \r\n\r\n 11.5 画笔 306 \r\n\r\n 11.6 钢笔 308 \r\n\r\n 11.7 创建PenMode应用程序 312 \r\n\r\n 11.8 字体 312 \r\n\r\n 11.9 绘制形状 313 \r\n\r\n 11.10 Mandelbrot范例 316 \r\n\r\n 11.10.1 绘制Mandelbrot图形 323 \r\n\r\n 11.10.2 绘制橡皮筋 323 \r\n\r\n 11.10.3 TBitmap:为Mandelbrot图形照相 324 \r\n\r\n 11.10.4 创建事件和处理OnPaint方法 325 \r\n\r\n 11.10.5 LoadResource:创建开始的场景 326 \r\n\r\n 11.11 虚构的3D世界 326 \r\n\r\n 11.11.1 伪3D世界的体系结构 327 \r\n\r\n 11.11.2 为游戏创建图形 329 \r\n\r\n 11.11.3 双重缓存和表面 329 \r\n\r\n 11.11.4 游戏引擎的核心代码 330 \r\n\r\n 11.11.5 实现ISimpleSurface和IDrawTools 350 \r\n\r\n 11.11.6 ISimpleSurface:创建即插即用的后端 352 \r\n\r\n 11.11.7 在正确的位置绘制墙段 353 \r\n\r\n 11.12 本章小结 355 \r\n\r\n 第三部分 Linux系统编程 357 \r\n\r\n 第12章 控制台应用程序. 内存管理和文件I/O 358 \r\n\r\n 12.1 控制台应用程序 358 \r\n\r\n 12.1.1 控制台开发 359 \r\n\r\n 12.1.2 运行控制台应用程序 359 \r\n\r\n 12.2 内存管理 359 \r\n\r\n 12.2.1 变量和数据结构 360 \r\n\r\n 12.2.2 对象 360 \r\n\r\n 12.3 Kylix中的文件I/O 361 \r\n\r\n 12.3.1 传统的Pascal文件操作 361 \r\n\r\n 12.3.2 使用TFileStream进行文件输入/输出 363 \r\n\r\n 12.3.3 Linux文件的特点 365 \r\n\r\n 12.3.4 使用glibc命令 367 \r\n\r\n 12.4 本章小结 367 \r\n\r\n 第13章 进程和线程 368 \r\n\r\n 13.1 Linux中的应用程序执行方法 368 \r\n\r\n 13.2 Kylix线程 369 \r\n\r\n 13.2.1 通过线程访问内存 370 \r\n\r\n 13.2.2 同步错误和线程安全 371 \r\n\r\n 13.2.3 使用线程对象的Synchronize方法 371 \r\n\r\n 13.2.4 临界段 372 \r\n\r\n 13.2.5 多读专写同步器 372 \r\n\r\n 13.2.6 锁定机制 373 \r\n\r\n 13.2.7 线程结束和终止 373 \r\n\r\n 13.2.8 调试多线程应用程序 374 \r\n\r\n 13.2.9 有关线程的最后思考 374 \r\n\r\n 13.3 Linux进程控制和进程间通信 374 \r\n\r\n 13.3.1 创建新进程 375 \r\n\r\n 13.3.2 发信号给进程或删除进程 376 \r\n\r\n 13.4 本章小结 377 \r\n\r\n 第四部分 DataCLX 379 \r\n\r\n 第14章 DataCLX基础 380 \r\n\r\n 14.1 DataCLX的体系结构 380 \r\n\r\n 14.2 数据访问 380 \r\n\r\n 14.2.1 连接到数据库 380 \r\n\r\n 14.2.2 检索数据 381 \r\n\r\n 14.3 数据控件 382 \r\n\r\n 14.3.1 使用可视化数据控件显示数据 382 \r\n\r\n 14.4 典型的数据流 385 \r\n\r\n 14.4.1 交互式数据操纵 386 \r\n\r\n 14.4.2 数据发布 386 \r\n\r\n 14.5 配置服务器 387 \r\n\r\n 14.5.1 连接到InterBase 387 \r\n\r\n 14.5.2 连接到MySQL 388 \r\n\r\n 14.5.3 连接到DB2 388 \r\n\r\n 14.5.4 连接到Oracle 389 \r\n\r\n 14.6 本章小结 389 \r\n\r\n 第15章 使用数据-感知组件 390 \r\n\r\n 15.1 TSQLConnection 390 \r\n\r\n 15.1.1 TSQLConnection的属性 391 \r\n\r\n 15.1.2 TSQLConnection的方法 392 \r\n\r\n 15.1.3 TSQLConnection的事件 392 \r\n\r\n 15.2 TSQLDataSet 394 \r\n\r\n 15.3 TSQLQuery 394 \r\n\r\n 15.4 TSQLStoredProc 395 \r\n\r\n 15.5 TSQLTable 395 \r\n\r\n 15.6 TClientDataset 395 \r\n\r\n 15.6.1 TClientDataSet的属性 396 \r\n\r\n 15.6.2 TClientDataSet的方法 397 \r\n\r\n 15.7 TDataSetProvider 399 \r\n\r\n 15.8 TSQLClientDataSet 400 \r\n\r\n 15.9 TSQLMonitor 400 \r\n\r\n 15.10 一般的数据集用法模式 402 \r\n\r\n 15.10.1 查询 402 \r\n\r\n 15.10.2 查找字段 402 \r\n\r\n 15.10.3 参数化查询 403 \r\n\r\n 15.10.4 主-细关系 403 \r\n\r\n 15.10.5 定制明细网格 404 \r\n\r\n 15.10.6 计算字段 405 \r\n\r\n 15.10.7 本地递增搜索 405 \r\n\r\n 15.10.8 本地过滤 407 \r\n\r\n 15.10.9 书签 407 \r\n\r\n 15.10.10 使用存储过程 409 \r\n\r\n 15.10.11 客户端临时键 410 \r\n\r\n 15.10.12 聚合字段 411 \r\n\r\n 15.11 本章小结 411 \r\n\r\n 第16章 数据访问层 412 \r\n\r\n 16.1 数据访问层的目标 412 \r\n\r\n 16.1.1 数据访问速度最大化 412 \r\n\r\n 16.1.2 平台独立性 412 \r\n\r\n 16.1.3 易于部署 413 \r\n\r\n 16.1.4 使应用程序最小, 占用的资源最少 413 \r\n\r\n 16.1.5 为高效地处理SQL和存储过程提供通用接口 413 \r\n\r\n 16.1.6 使驱动程序开发容易. 可扩展 413 \r\n\r\n 16.1.7 可访问数据库特定的特性 413 \r\n\r\n 16.2 概貌 414 \r\n\r\n 16.3 MyBase数据集 414 \r\n\r\n 16.3.1 格式(二进制和XML) 415 \r\n\r\n 16.3.2 元数据 415 \r\n\r\n 16.3.3 约束 416 \r\n\r\n 16.3.4 数据 416 \r\n\r\n 16.3.5 字段类型 416 \r\n\r\n 16.3.6 特殊字段 417 \r\n\r\n 16.3.7 德尔塔 417 \r\n\r\n 16.3.8 返回给发送方 418 \r\n\r\n 16.4 数据库连接 419 \r\n\r\n 16.4.1 dbExpress抽象 420 \r\n\r\n 16.4.2 数据类型映射 428 \r\n\r\n 16.5 dbExpress驱动程序开发 428 \r\n\r\n 16.5.1 理解数据库厂商客户 429 \r\n\r\n 16.5.2 初始化环境变量 429 \r\n\r\n 16.5.3 连接到数据库服务器 429 \r\n\r\n 16.5.4 初始化语句句柄 429 \r\n\r\n 16.5.5 准备SQL语句 430 \r\n\r\n 16.5.6 传递运行阶段参数 430 \r\n\r\n 16.5.7 执行SQL语句 430 \r\n\r\n 16.5.8 绑定记录缓冲区 430 \r\n\r\n 16.5.9 取回记录 431 \r\n\r\n 16.5.10 释放句柄和断开连接 432 \r\n\r\n 16.6 dbExpress的核心实现 432 \r\n\r\n 16.6.1 SQLDriver 432 \r\n\r\n 16.6.2 SQLConnection 432 \r\n\r\n 16.6.3 SQLCommand 433 \r\n\r\n 16.6.4 SQLCursor 435 \r\n\r\n 16.6.5 SQLMetaData 436 \r\n\r\n 16.7 本章小结 436 \r\n\r\n 第17章 创建一个应用程序 437 \r\n\r\n 17.1 应用程序描述 437 \r\n\r\n 17.2 数据库定义 438 \r\n\r\n 17.2.1 表 438 \r\n\r\n 17.2.2 索引 440 \r\n\r\n 17.2.3 数据约束 440 \r\n\r\n 17.2.4 生成器 441 \r\n\r\n 17.2.5 存储过程 441 \r\n\r\n 17.2.6 触发器 443 \r\n\r\n 17.3 基本设计 444 \r\n\r\n 17.3.1 数据模块 444 \r\n\r\n 17.4 GUI界面 447 \r\n\r\n 17.4.1 显示数据 447 \r\n\r\n 17.4.2 编辑数据 447 \r\n\r\n 17.4.3 扩展功能 448 \r\n\r\n 17.5 Web界面 449 \r\n\r\n 17.5.1 格式化 449 \r\n\r\n 17.5.2 布局 453 \r\n\r\n 17.5.3 导航 455 \r\n\r\n 17.6 本章小结 457 \r\n\r\n 第18章 数据库优化 458 \r\n\r\n 18.1 简介 458 \r\n\r\n 18.2 填充数据库 458 \r\n\r\n 18.3 监视SQL通信 459 \r\n\r\n 18.4 避免长时间打开事务 459 \r\n\r\n 18.5 不要使用包含动词'like'的参数化查询 459 \r\n\r\n 18.6 避免使用主键和外键 460 \r\n\r\n 18.7 使用存储过程 460 \r\n\r\n 18.8 使用触发器 461 \r\n\r\n 18.9 精益求精 461 \r\n\r\n 18.10 参数化并准备查询以达到最佳性能 462 \r\n\r\n 18.11 像避免瘟疫一样避免使用fetchall 462 \r\n\r\n 18.12 Rob的左外连接规则 462 \r\n\r\n 18.12.1 设计时避免左外连接 463 \r\n\r\n 18.12.2 使用相关的子查询 463 \r\n\r\n 18.12.3 使用存储过程 463 \r\n\r\n 18.12.4 使用左外连接 464 \r\n\r\n 18.13 当数据库非常大或用户非常多时缓存查找表 464 \r\n\r\n 18.14 使用智能查找 464 \r\n\r\n 18.15 关闭元数据 465 \r\n\r\n 18.16 关闭同步写入, 但要清楚这样做的危险 465 \r\n\r\n 18.17 理解数据库索引 466 \r\n\r\n 18.17.1 理解选择性 466 \r\n\r\n 18.17.2 谨慎使用外键 466 \r\n\r\n 18.17.3 多列索引 466 \r\n\r\n 18.17.4 对索引排序 466 \r\n\r\n 18.17.5 索引字段应尽可能少 466 \r\n\r\n 18.18 针对InterBase的技巧 466 \r\n\r\n 18.18.1 不要使用大型VarChar 466 \r\n\r\n 18.18.2 创建前端应用程序时总是使用远程连接 467 \r\n\r\n 18.18.3 将数据库的页面大小设置为2KB或4KB 467 \r\n\r\n 18.18.4 理解索引计划 467 \r\n\r\n 18.18.5 使用Gfix来设置数据库缓存缓冲区 471 \r\n\r\n 18.18.6 将InterBase安装在单处理器机器上 471 \r\n\r\n 18.19 本章小结 471 \r\n\r\n 第五部分 Web开发 473 \r\n\r\n 第19章 Apache Web服务器应用程序 474 \r\n\r\n 19.1 Web服务器应用程序 474 \r\n\r\n 19.1.1 CGI协议 474 \r\n\r\n 19.1.2 CGI表单 474 \r\n\r\n 19.2 Apache Web服务器 475 \r\n\r\n 19.2.1 Kylix和CGI 476 \r\n\r\n 19.2.2 配置CGI 478 \r\n\r\n 19.2.3 配置DSO 479 \r\n\r\n 19.3 本章小结 480 \r\n\r\n 第20章 Web服务器开发 481 \r\n\r\n 20.1 Web模块 481 \r\n\r\n 20.2 新建Web服务器应用程序 481 \r\n\r\n 20.3 WebBroker组件 483 \r\n\r\n 20.3.1 TWebDispatcher 484 \r\n\r\n 20.3.2 TWebModule 484 \r\n\r\n 20.3.3 TWebResponse 485 \r\n\r\n 20.3.4 TWebRequest 485 \r\n\r\n 20.4 显示内容 486 \r\n\r\n 20.4.1 模仿GET 488 \r\n\r\n 20.5 页面生成器 488 \r\n\r\n 20.5.1 TPageProducer 488 \r\n\r\n 20.5.2 HTMLDoc和HTMLFile 491 \r\n\r\n 20.5.3 TDataSetPageProducer 491 \r\n\r\n 20.6 表格生成器 497 \r\n\r\n 20.6.1 TDataSetTalbeProducer 497 \r\n\r\n 20.6.2 定制 502 \r\n\r\n 20.6.3 主-细关系 502 \r\n\r\n 20.7 本章小结 503 \r\n\r\n 第21章 高级Web服务器开发 505 \r\n\r\n 21.1 新的WebApp42 505 \r\n\r\n 21.1.1 Producer和ProducerContent 505 \r\n\r\n 21.2 dbExpress 506 \r\n\r\n 21.3 TDataSetTableProducer 507 \r\n\r\n 21.3.1 TSQLQueryTableProducer 507 \r\n\r\n 21.3.2 PrepareSQLQueryTableProducer 509 \r\n\r\n 21.4 维护状态信息 511 \r\n\r\n 21.4.1 胖URL 512 \r\n\r\n 21.4.2 Cookies 515 \r\n\r\n 21.4.3 隐藏字段 516 \r\n\r\n 21.5 高级页面生成技术 518 \r\n\r\n 21.6 图像 522 \r\n\r\n 21.7 跨平台策略 528 \r\n\r\n 21.8 本章小结 529 \r\n
\r\n
在Borland公司工作的乐趣之一是有机会见证产品的开发过程. 本人经常抽出一些时间, 前往Delphi开发小组, 与Chuck. Danny. Alien. Eddie以及其他小组成员了解他们的开发情况, 这很有趣.
KyliX的开发无疑是一件大事, 本人有幸目睹了从规划到发布的整个过程. 虽然, 在开发过程中遇到过困难, 但几个月来目睹其一步步走向面世无疑是非常快乐的.
成功推出Kylix是激动人心的, 现在人们终于可以在Linux中使用功能强大的开发环境, 通过单击几下鼠标, 便开发出功能强大的应用程序. Linux中一度非常艰巨的任务现在可轻松完成.
本人一直是Delphi的热心追随者, 因此就我个人而言, 将其移植到Linux中是激动人心的. 从长远看, 这将给未来的Linux开发和整个Linux操作系统带来巨大的影响.
在整个Kylix的开发过程中, 我和两位同事也是好朋友的John Kaster和Charie Calvert分享了目睹其创建过程的快乐. 我们长时间地呆在一起, 在Linux机器上测试新代码. 进行试验并共享开发新产品的乐趣. John和Charlie从一开始就参与了Kylix的开发, 事实上, 他们参加了最初的规划会议, 而其他作者, 尤其是Bob Swart则从该产品的测试版本发布起, 就开始使用它, 他与Kylix开发小组以及Borand公司其他部门的工作人员紧密地配合.
与 Linux下的其他开发系统相比, 使用Kylix进行开发比较简单. 学会使用Kylix后, 数据库开发. Web开发乃至系统开发工作都将变得相对比较简单. 尽管如此, 但KyliX包含的特性非常多, 掌握它需要一段时间.
在介绍如何使用Kylix方面, Charlie. John. Bob和其他作者是仅次于Danny. Alien. Eddie和Chuck的最佳人选. 本书介绍了Kylix和Object Pascal语言的所有主要特性和大量次要的特性, 是 Kylix开发的宝藏, 包含大量宝贵的信息, 读者可在Linux开发中不断地使用.
本人深信, 未来的几个月到几年间, Kylix和本书将帮助程序员创建出对企业. 用户以及整个 Linux世界非常有帮助的解决方案和工具. Kylix非常棒, 而本书将帮助读者参与到激动人心的Linux开发领域中.
Borland软件公司
开发人员关系部副主任David Intersimone
作为KyliX的首席设计师, 我有幸目睹了其从概念到向公众发布的全过程. 这本关于Kylix的图书的面世让我非常激动, 它向开发人员提供了创建功能强大的Linux应用程序所需的所有知识. 无论读者以前从事的是Windows还是Linux开发工作, 也不管是否使用过类似的工具, 本书提供的所有信息都将让您能够创建出用户喜爱的工具.
Linux是增长最快的产品, 也是计算机开发中最激动人心的领域, 已经成为一种成功的服务器平台. 而现在, 迫切需这样的技术, 即能够帮助Linux社区开发出功能强大. 快速. 易于使用而且吸引人的应用程序, Kylix填补了这方面的空白.
开发Kylix的初衷是为了提供一个实用的. 易于使用的工具, 让开发人员能够创建出用户喜爱的应用程序. Kylix在提供对 Linux底层功能访问能力的同时, 让用户能够轻松地使用组件来创建尖端的应用程序. 另一方面, 开发人员一定会对IDE中内置的高级调试和程序分析工具爱不释手.
我们开发Kylix旨在将Delphi中的所有重要特性移植到Linux平台中. 具体地说, 重点放在基于数据库和Web的应用程序. 数据库是许多企业应用程序的关键所在, 而我们则尽力使Kylix成为Linux环境下创建数据库应用程序的最容易的工具. 只需单击几次鼠标, 开发人员便能够创建一个简单的应用程序, 让用户能够访问开发源代码数据库和专用数据库中的数据. 再做一些工作后, 便可以创建出功能强大的应用程序, 它能够访问位于不同数据库中的几十乃至几百个表.
对Borland公司的开发小组来说, 开发Kylix是一项激动人心但又困难重重的工作. 在工作过程中, 我们一直致力于将Linux开发中最复杂的部分封装到易于使用的组件中. 因此, 最终的产品包含100多个可扩展的控件, 开发人员使用它们可以创建出高质量的应用程序.
在编写关于Kylix的图书方面, 没有比本书作者Charlie Calvert. John Kaster和Bob Swart更合适的人选. 在 Borland公司将Kylix正式立项之前, Charlie和John便参与了这方面的工作. 他们作为 Kylix核心小组的成员参与了该产品的规划工作, 并帮助确定了其发行版应包含的功能. 在KyliX的整个开发过程中, 我经常看到他们与各位 R&D工程师进行交流, 了解对 KyliX工程决策方面的调整情况.
他们同 David Intersimone一道, 主持了2000年3月20日召开的Kylix Xick Start会议, 在这次会议上, 我们首次向外界介绍了Kylix. Kick Start是一次技术简介会, 与会的有几百个技术合作伙伴和创作者. Charie和John负责会程安排, 并与Kylix R&D小组一道决定应向与会者介绍哪些最有用的信息. 之后的几个月中, Charlie和John在世界各地的 50多个城市主持了Kylix Xick Start会议.
Charie和John经常同Kylix R&D小组进行交流, 以确保完全了解技术方面的决策. 他们知道开发人员面临的问题. Charlie和John为外部出版物(包括您可能购买了的其他 Kylix方面的图书)提供了原始信息, 并一直负责提供和提炼关于Kylix方面的信息.
本书不但介绍了kylix的工作原理, 并解释了这样工作的原因, 是作者两年多来深入使用kylix和参与kylix开发过程的结晶.
祝您阅读本书以及使用Kylix进行开发时愉快!未来的Kylix版本将添加大量非常棒的特性, 而本书将为您使用Kylix开发各种应用程序打下坚实的基础.
Borland软件公司
Kylix和Delphi首席设计师Chuck Jazdzewski
Charlie Calvert是一名程序员兼作者, 同妻子(兼同事) Mmpie以及两只猫居住在加利福尼亚的圣克鲁斯. 其著作包括《Delphi 4 Unleashed》. 《C++ Builder 3 Unleashed》. 《Delphi 2 Unleashed》. 《Teach Yourself Windows 95 Programming in 21 Days》. 《Delphi Unleashed》. 《Teach Yourself Windows Programming》. 《Turbo Pascal Programming 101》等. 他还同妻子
本书介绍如何使用Kylix. 通过阅读本书, 读者将能够使用Kylix开发出适用于开放源代码. 企业市场. 消费者市场或自己使用的高质量应用程序.
本书针对的读者
本书是针对具有丰富的面向对象开发经验的中高级程序员编写的. C++. Java或Object Pascal方面的经验将有助于读者理解本书的内容.
读者必须已经了解:
如何编程,
结构化编程,
面向对象编程.
但无需了解:
Object Pascal. 虽然熟悉它将有助于读者阅读本书, 但这并不是必须的, 因为书中将对Object Pascal做完整的介绍.
Linux操作系统. 虽然熟悉它将有助于读者阅读本书, 但这也不是必须的.
内容简介
本书的主旨是向高级程序员提供信息, 读者无需具备Kylix的姊妹产品Delphi for Windows方面的知识, 不过书中的大量内容是针对有这方面背景的读者编写的.
如果读者没有使用过Delphi, 不了解 Object Pascal, 也将对书中的很多内容感兴趣. 具体地说, 书中简要介绍了ObjectPascal的基础知识, 这些内容对于经验丰富的程序员很有帮助. 本书旨在让Java. C++. Python. Perl和VB程序员快速掌握Kylix, 而不是向初学者介绍如何编程.
本书首先介绍Object Pascal的基本语法, 然后介绍如何使用Kylix进行可视化编程, 旨在使 Kylix新手确信:Kylix并不依赖于黑盒子和诡秘的手法. 具体地说, 读者将发现, 可视化开发工具是为帮助程序员快速地编写而设计的, 并没有隐藏该语言的内部工作机制. 这是程序员的工具, 如果愿意, 程序员可通过代码完成任何工作.
本书首先针对经验丰富的程序员, 介绍了Object Pascal. 这部分内容并非是介绍如何编程的教程, 而是针对C++. Java. Perl. Python或VB程序员, 概述了Object Pascal. 具体地说, C++或Java开发人员将从中找到很多有价值的技巧, 从而快速掌握Object Pascal.
Kylix的可视化编程依赖于一个面向对象库——CLX. 本书的第二部分将重点介绍CLX的体系结构及其构成.
打好基础后, 接下来将介绍Linux系统编程. 读者将学习如何直接使用Linux操作系统的底层功能, 而将GUI和高瑞工具放在一边. 持怀疑态度的读者阅读这些内容后将相信:使用Obect Pascal确实能够访问操作系统的所有主要服务. 有Delphi经验的读者则可能是首次深入到Linux操作系统的内部机制, 因此书中将对该操作系统做详细的介绍, 以帮助这些读者掌握这方面的基础知识.
第四部分主要由John Kaster编写, 介绍了数据库编程. 数据库编程是 Kylix的强项之一, 因此这部分包含了所有重要的信息, 对Kylix数据库体系结构以及如何创建Delphi数据库应用程序进行了深入的探讨, 另外还介绍了如何使用Delphi提供的工具来连接和操纵数据, 并介绍了诸如InterBase和MySQL等SQL数据库.
第五部分介绍Web开发, 主要针对的是Apache服务器, 因为它是Linux平台上Web开发的主要工具. 这部分的主要内容包括如何创建CGI应用程序. 如何扩展应用程序以包含更复杂的数据模型以及如何使用Javascript和DOM来改进应用程序.
书中有关Object Pascal和 CLX的内容是由 Charlie Calvert编写的, 数据库工具部分由Joho Kaster编写, Web开发部分则主要由Bob Swart编写, 本机Linux API部分由Paul Freitas编写.
本书作者努力做到:
用简单易懂的方式阐述技术,
通过范例程序提供大量的代码,
按重要程度组织内容.
书中的大部分代码都是开放源代码, 可从http://sourceforge.net/projects/elvenware下载. 有关书中代码的更新情况, 请参阅souecefofge网站和www.elvenware.com.
闲言少叙, 言归正传. 下面首先介绍Kylix.
Kylix简介
Kylix是一个用于创建跨平台应用程序的工具, 是在业界享有盛誉的工具软件开发公司Borland推出的.
Kylix生成的应用程序源代码是跨平台的. 用Kylix编写的应用程序不是基于模拟层的, 可以通过重新编译来生成高性能的Windows或Linux本机应用程序.
Kylix是基于获奖产品Delphi for Windows的. 和Delphi一样, Kylix也使用Object Pascal语言和可视化的编程工具, 让程序员能够很容易地开发出高性能的应用程序.
笔者认为, Delphi是开发Windows应用程序的忧秀工具. Delphi赢得了广泛的声誉, 备受业内资深程序员的青睐. 将Delphi移植到Linux环境以推出Kylix是编程界的大事, 极有可能成为Linux发展史上的里程碑.
和Delphi一样, Kylix也让程序员能够向窗体中拖放组件, 来创建应用程序的界面. 例如, 图I.1是一个KyliX应用程序, 由几个按钮和编辑控件组成. 使用KyliX创建这种应用程序非常简单, 经验丰富的Kylix程序员在30秒内便能完成.
Kylix还有很多帮助程序员对窗体中的组件进行排列. 对齐. 调整大小和格式的特性. 使用 Kylix进行可视化设计非常简单, Kylix还提供了让程序员能够在多个工程中重用和共享代码的机制和素材库.
Kylix还提供了高级调试器和测览器, 前者帮助程序员在运行阶段查看代码:后者帮助程序员在设计阶段查看代码. 另外, Kylix还通过弹出式窗口帮助程序员编写代码, 弹出式窗日中列出了函数的参数或当前可调用的函数(按字母顺序排列). 图I.2是一个Kylix弹出式窗口, 其中列出了特定对象可用的方法. 虽然我个人认为这些工具非常有帮助, 但程序员也可以根据自己的喜好打开或关闭它.
Kylix编程环境还有很多其他出色的特性, 其中包括创建共享对象的工具. 帮助创建窗体的向导. 帮助创建组件的对话框以及用来调整KyliX介发环境的Tools API. 由于篇幅所限, 这里无法深入讨论这些特性, 但本书的前两部分将对它们进行介绍.
Object Pascal
Delphi和Kylix都使用Object Pascal编程语言. Object Pascal是种非常不错的语言, 它全面支持基本的OOP特性, 如多态. 继承和封装, 同时还支持现代编程语言的大多数高级特性, 如指针和接口.
与 Object Pascal功能最接近的编程语言是Java. 二者之间的最大不同是, Object Pascal是一种编译型语言, 其性能与C++相当. Java脱胎于C, 而Object Pascal则是基于Niklas Wrth创建的Pascal编程语言.
但是, 和Java一样, Object Pascal也包含很多功能强大的现代编程语言特性, 因此, 其体系结构比最初的Pascal语言更为复杂.
读者现在应对Kylix包含的特性响了基本的认识. Kylix的主旨之一是将Delphi移植到Linux操作系统中, 旨在让Linux程序员能够使用像 Delphi那样的高质量开发环境. 需要指出的是, Kylix同Delphi并不是一回事, 而是基于Delphi的. 下面介绍Kylix的体系结构及其与Delphi的关系.
Kylix的体系结构
Delphi for Windows基于面向对象库VCL. Kylix的创建者本可以让Kylix与Delphi VCL完全兼容, 但他们并没有这样做. Delphi是一种基于Windows API的Windows产品. Linux并不能以本机的方式访问Windows API, 虽然可以通过一个名为WINE的API访问它们. 然而, Kylix开发小组决定不使用WINE, 而是创建一个能生成真正的Linux本机应用程序的编译器.
要将Delphi移植到Linux中, 开发小组有很多种选择. 最后, 他们选择了编写一个名为CLX的OOP层, 使得只需做最少的修改, Delphi应用程序就可在Linux下运行.
CLX简介
CLX是一个OOP库, 其可视化控件是基于Qt的, 而Qt是目前最流行的Linux桌面KDE所基于的Linux本机库(这里的桌面指的是Linux操作系统的GUI界面. KDE之于Linux系统犹如开始(Start)菜单以及记事本. 写字板. 计算器和控制面板等核心工具之于Windows系统. Qt是被用来建立KDE的C++OOP库的). Qt. KDE和整个 Linux GUI的体系结构将在上文中做深入介绍, 具体地说是在第四章和第7章.
CLX让开发人员能够创建出与Linux无缝集成的应用程序. 具体地说, 它让您创建不依赖于任何Windows代码和模拟层的真正的Linux本机应用程序. 但是, 要将Delphi应用程序移植到Linux中, 必须修改其中的代码一至少需要修改一部分, 问时, 要将Kylix应用程序移植到Windows中, 必须使用Qt DLL(记住, 要让应用程序同时能在Windows和Linux中运行, 则无论您采用哪种方式, 都将陷入两难境地, 这就是第22条军规. 但是, Windows所需的Qt DLL只有1M字节左右, 相对于Windows这样的操作系统来说, 这是微不足道的. 通常, 为装载其基本工具, Windows需要使用80MB以上的内存和交换空间).
需要指出的是, 虽然CLX与VCL极其类似, 但它们并不完全相同. 它们非常相似, 以至于只需对Delphi应用程序稍做修改, 便可运行在Linux系统中.
将Delphi移植到Linux中时, 开发小组所做的决策引起的后果非常多, 其中最重要的是Delphi程序员必须放弃他们熟悉的面向对象库——可视化组件库(Visual Component Library, VCL), 取而代之的是新库CLX.
还需要指出的是, Qt和Linux内核是由不同的开发小组开发的. Qt不是Linux的顶层, 而Windows中的按钮和列表框是Windows操作系统顶层的一部分. Linux和Wndows都有核心操作系统, 它们上面有按钮和列表框. 在Windows中, 控件是操作系统的一部分:而在Linux中, 控件是单独提供的. 这两种操作系统中的控件的体系结构相同, 但 Linux允许程序员选择不同的部件集(widget set).
不管Kylix小组在其他方面进行了何种折衷, 但在使程序员能够编写在Linux上运行良好的本机GUI应用程序方面, 他们确实是尽心尽责的. 毫无疑问, Qt是一个真正的Linux本机部件集. 另外, Kylix小组选择的体系结构与Linux处理应用程序的方式非常接近. 在合理的限制范围内, 开发小组尽可能让程序员能够开发出高性能的Linux应用程序. 在不违背Linux本机程序体系结构的情况下, 这些应用程序将包含尽可能多的Delphi体系结构的特性.
Delphi与Kylix的兼容性
使用Delphi和Kylix可以完成两种编程任务:
编写应用程序,
编写组件.
在应用程序开发方面, Kylix小组试图让Delphi和Kylix之间的兼容性尽可能高, 但Kylix小组要在组件编写方面保持这种兼容性是不可能的.
简而言之, 如果知道如何使用Delphi的可视化工具开发应用程序, 则使用Kylix的可视化工具进行应用程序开发将很容易, 但使用Delphi编写组件的技能并不适用于Kylix. 同样, 将应用程序从Windows移植到Linux很容易, 但移植自定义组件将非常困难. 在很多情况下, 只要有一定的耐心, 并很好地掌握了Kylix和Delphi(本书将让读者很好地掌握Kylix), 则将在Delphi for Windows中设计的窗体移植到Kylix中不会太困难.
移植应用程序
Kylix小组的目标是:可以在一到两月的时间内, 将一个大型应用程序从Delphi移植到Kylix中. 除非是最简单的情况, 否则不要指望从VCL迁移到CLX只是简单的重新编译而已. 正如前面指出的, 这两种模型有天壤之别.
将一个大型应用程序从Windows移植到Linux大约需要一两个月的时间. 这样的工作量好像不少, 但开发一个大型应用程序大约需要6个月. 一年甚至更长的时间. 如果能用一个月的时间将Windows应用程序移植到Linux中, 则与完全重新编写相比, 所需时间只有1/6到1/12.
注意:请不要混淆了:这里讲的是将Windows下的VCL应用程序移植到Kylix中, 要将Linux环境下开发的Kylix应用程序移植到Windows中, 只需重新编译即可——至少, 从理论上说是这样的. 要成功完成这种移植, 程序不能使用 Linux API. 壬. 果直接使用了Linux API, 则移植起来将不会这么容易, 但如果代码是基于CLX的, 则只需重新编译, 便可将程序迁移到Windows中.
将VCL应用程序移植到Kylix中, 很可能遇到的最严重的问题之一是:应用程序使用了第三方控件.
移植组件
组件编写人员很可能发现, 移植组件并没有移植应用程序那么简单. 应用程序是基于CLX的, 而CLX与VCL极其类似:组件常常是基于Windows API的, 而Linux API与Windows API毫无相似之处. 即使是基于VCL的组件也很难移植到Linux中, 原因是组件通常依赖于VCL最底层. 最复杂的部分, 在移植到Linux中时, 对面向对象库的这部分做了重大的修改.
Borland公司的目标是, 使CLX与Qt密切对应, 而不是尽量让CLX适合Windows体系结构. 具体地说, 它没有试图在Qt消息和Windows消息之间建立紧密的联系. 如果Windows代码只使用了Borland事件, 如OnKeyDown和OnMouseDown, 则移论到Linux时将很容易:如果使用了Windows消息WM_KEYDOWN和WM_LBUTTONDOWN, 则移植起来将很麻烦.
Delphi程序员对Windows API的依赖越多, 将组件移植到Linux时将越困难. 如果没有过多地使用Windows API, 则将非可视化组件移论到Linux将比可视化组件容易.
在访问数据库方面, Borland公司在Kylix中引入一种新的体系结构dbExpres. dbExpress被设计用来访问 SQL服务器, 其性能比BDE中的SQL连接工具要高得多. (dbExpress没有提供用于访问Paradox. Access和dBase表的工具, Borland公司将重点放在SQL数据库. )
如同CLX被设计成尽可能与VCL相似一样, dbExpress也被设计成尽可能与BDE相似. 从BDE过渡到dbExpress是一种挑战, 但其中的很多工具是Delphi开发人员非常熟悉的.
Borland公司对该体系结构抱有很大期望. 实际上, 它想使该数据库访问API成为Linux环境下的标准.
Kylix程序的类型
Linux常被用作服务器, 因此Linux中的很多工具都是从命令行运行的. Kylix主要针对的是那些要创建GUI应用程序的程序员, 但KyliX是个灵活的工具, 也可以用来创建从命令行运行的实用程序和服务器.
Kylix提供了一个自动生成缺省的. 几乎空的命令行或控制台程序的向导(这将在第1章介绍). 程序员可以访问核心操作系统级的函数, 命令行程序经常需要调用这样的函数. 例如, Kylix几乎可以访问Libc中的所有函数, 这对于高级Linux程序员来说无疑是个好消息(Libc是个共享对象, 其中包含C语言库中
的所有核心函数). 但Kylix并不仅能开发命令行工具和基干部件的工具, 还被用来开发只使用X Window库但不包含任何部件的应用程序. 这种应用程序运行在GUI环境下, 但不需要包含Qt. 简言之, 它没有控件, 而只有文本或位图. 这种程序通常非常小, 运行速度非常块, 但仍包含典型的GUI应用程序的一些特性. Kylix并不能帮助程序员创建这种程序, 使用Kylix开发这种程序时, 与使用C语言开发的难度相当 (对于Windows程序员来说, 可以认为开发这种应用与从空白开始开发典型的Windows API程序的难度相当. 实际上, 这两种程序之间有很多相似的地方. 例如, Windows调用Crewndow, Kylix调用XcreatSimpleWindow或XcreatWindow. 第6章将深入讨论这个主题).
GTK和内核开发
在Kylix第一版中, Borlmd公司没有提供任何功能来简化GTK的使用. 程序员可以使用它, 但需要做的工作相当多.
Linux内核不是Kylix开发的一部分. 内核与GNU C++编译器紧密结合在一起, 它是使用GNU编译器构建的, 依赖于该编译器中的一些bug. 基于上述事实, Kylix没有切实可行的办法对Linux内核进行编程. 对Linux内核进行编程还是要依靠GCC.
但是, 大多数Linux开发的底层功能并介在内核中, 而是在Libc库中. Libc包含打开和关闭文件. 新建和删除文件与目录. 改变目录. 操作线程. 设置时间和日期以及调度任务等的例程.
Kylix与数据库
Delphi是最著名的数据库开发工具. 正如前面指出的, Dephi依赖于数据库访问层BDE, 然而, Kylix开发小组决定不将BDE移植到Linux中.
由于本地数据库向SQL数据库的转移, Kylix开发小组决定新的数据库引擎dbExpress应针对SQL数据库. 目前, dbExpress小能用来访问Paradox. dBase或Access表, 它针对的是InterBase. MySQL和其他SQL数据库.
dbExpress很小, 运行速度快, 而且是模块化的. 这与BDE形成了鲜明的对比, 后者包含很多工具, 但庞大且难于使用, 而dbExpress没有那么多的特性, 但能出色地完成其主要任务. 具体地说, 对于很多任务, 使用 dbExpress(而不是 BDE)来完成的, 性能有望提高100%. 有关dbExpress的内容由John Kaster 编写, 其中介绍了程序员需要掌握的. 关于这个新的. 功能强大的. 数据库开发工具的所有知识.
Kylix与Web开发
Delphi的Web开发工具功能强大, 易于使用, 但没有Delphi GUI和数据库开发工具那么复杂. Delphi6中的新特性将有助于改变这种状况, 现在还不清楚这些新的Web开发特性是否会被移植到Kylix中(事实上, Delphi 5的很多特性都没有移植到Kylix第1版中).
Delphi的WebBroker体系结构使得创建基于CGI或DLL的应用程序非常容易. 这些工具可用来创建简单的Web页. 响应 Web上的事件以及在 HTML表单中显示数据库表. Delphi的WebBroker在Kylix得到了完全实现. Kyllx中有关Web开发的最好的消息是:在 Kylix中, 只需对用Delphi编写的 WebBroker代码重新编译即可, 而无需做任何修改. 实际上, 在Delphi 5或更早版本中开发的WebBroker代码都可在Kylix中重新编译.
Kylix的Web开发功能主要是针对Apache Sever设计的, 使用它可以很容易地创建标准CGI程序和Apache共享模块(Apache共享模块类似于ISAPI). Web体系结构并不是基于Qt的, 所以进行Web开发时无需掌握Qt.
就目前而言, 在帮助快速地开发功能强大的Web应用程序方面, Linux提供的GUI工具很少. 因此, Kylix的WebBroker体系结构将受到高级程序员的欢迎. 随着时间的推移, Borland公司计划将更高级的Delphi Web开发工具移植到Kylix中.
有关WebBroker体系结构的内容是由Bob Swart编写的, 这些内容在第17~19章中描述.
小结
这里简要地介绍了Kylix和本书的内容. Kylix有一些优点, 但一些技术方面的困难追便开发小组做出艰难的选择和折衷. 笔者深信Kylix很可能步Delphi后尘, 成为Linux环境下出色的开发工具, 因此我们编写了本书.
谢谢您购买本书. 现在找一个舒适的地方坐下来, 打开计算机, 并开动脑筋, 对这一功能强大的新技术做一番有趣的探索吧.
作者