Indy 10.5.5 适用于: CodeGear RAD Studio 2009 Delphi for Win32 + C++Builder
今天得到了 Indy 10.5.5 版本,从代码看,应该是 RAD Studio 下一个版本的版本,因为 Unicode 环境下采用的字符串编码器的设计就与 10.2.3 完全不同。
传送字串时,可用的编码器除 ASCII 只能用于英文以外,其他均可以在 Unicode 环境下正确解释。他们有:
Default, UTF7, UTF8, Unicode, BigEndianUnicode
采用 Default 编码器时,完全能够与以前 BDS2007 及以前开发的网络程序通讯,虽然本地运行于 Unicode 环境。
关于 Indy 10.5.5 修改内容如下。
A、源码 System/IdGlobal.pas
源文件内的默认编码器是 TIdTextEncoding.ASCII,我改了默认编码器是 TIdTextEncoding.Default,主要是为了兼容以前的程序,默认直接以 ANSI 编码发送与接收。
B、源码 Core/IdIOHandler.pas
B.1 TIdIOHandler.DefStringEncoding 的默认编码器是 TIdTextEncoding.ASCII,我把他改成了默认编码器由 System/IdGlobal.pas 程序的默认编码器决定。
B.2 修改了变更编码器时同步 FInputBuffer 与 FWriteBuffer 成员的编码器(虽然没啥用,但还是改了)
B.3 修改了 ReadLn 函数后返回读取字串时,可能会未删除尾部 CR 而导致多一个字节的 BUG (使用 Unicode 编码器时)。
C、其他二个 .pas 修改,是因为对变量不必要赋值,编译时报警告。因为不重要,所以不再列出。
总结升级步骤如下:
1、首先卸掉 IndyProtocols 与 IndyCore 组件库。
2、备份原有文件。(我个人认为是不需要的,原因是因BDS2009附带的 Indy10.2.3 组件太多的 BUG, 几乎是无法采用,而且在 $(BDS)/source/Indy/Indy10 目录下文件也是不全的(system/IdCTypes.pas 就没有)。
A、改 "Indy10" 目录为 “Indy10.1"
$(BDS)/Include/Indy10
$(BDS)/lib/Indy10
$(BDS)/lib/debug/Indy10
$(BDS)/source/Indy/Indy10
B、改以下文件为 “*120.bpl.1"
$(BDS)/bin/IndySystem120.bpl
$(BDS)/bin/IndyCore120.bpl
$(BDS)/bin/dclIndyCore120.bpl
$(BDS)/bin/IndyProtocols120.bpl
$(BDS)/bin/dclIndyProtocols120.bpl
3、将源码复制到到
$(BDS)/source/Indy/Indy10
4、修改 Tools -> Options
修改以下节点的目的是为了直接输出文件到安装目录。
A、[Evniornment Options] [C++ Options] [Path and Directories] 节点
Package output directory: = $(BDS)/bin
BPI / LIB output directory: = $(BDS)/lib
B、[Evniornment Options] [Delphi Options] [Library - Win32] 节点
Package output directory: = $(BDS)/bin
DCP output directory: = $(BDS)/lib
5、打开项目 $(BDS)/source/Indy/Indy10/Indy120.groupproj
6、按次序编译, 原则上开发机器使用 Debug 版本。
7、安装以下组件
dclIndyCore120.bpl
dclIndyProtocols120.bpl
8、原有工程升级 Indy10 组件到 10.5.5, 请使用 UEdit32 等文件编辑器打开您的工程文件 (.cproj 或 .dproj), 修改时您粗心了可不要说是我教的。
IndySystem.lib 改为 IndySystem120.lib
IndySystem.bpi 改为 IndySystem120.bpi
IndyCore.lib 改为 IndyCore120.lib
IndyCore.bpi 改为 IndyCore120.bpi
IndyProtocols.lib 改为 IndyProtocols120.lib
IndyProtocols.bpi 改为 IndyProtocols120.bpi
9、恭喜,已经完成!
后记:
主要是 Indy10.2.3 版对 Unicode 支持 BUG 太多,无法兼容 RAD2007 开发的客户端通讯程序。
升级后,一切原来是很严重问题均迎刃而解.