网语飘飘.Net/Delphi攻坚战

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
编译器选择编译------Delphi2009向下兼容的折中解决办法
2008-09-21 10:50

编译器选择编译------Delphi2009向下兼容的折中解决办法

惊喜总是在最绝望的时候出现,是的,在试用CodeGear/Embarcadero Delphi2009一段时间后,我心情比较沮丧,CodeGear/Embarcadero并没有给我们带来太大的惊喜,靠Unicode 、泛型支撑的2009显得苍白无力,更令我心情坏到极点的是以往的项目根本不能平滑过度到2009上,即使是2007的项目也不行。

变化概要:

  • String 类型映射为 UnicodeString 而不是 AnsiString
  • Char 类型映射为 WideChar(2 bytes not 1 byte), 并且是 UTF-16 字符
  • PChar 类型映射为 PWideChar
  • C++ 中,System::String 映射到 UnicodeString 类
  • Delphi 中,AnsiString 映射为早先版本中默认的 string

未变化概要:

  • AnsiString
  • WideString
  • AnsiChar
  • PAnsiChar
  • 隐式转换仍然可用
  • 用户的活动页代码(The user's active code page)控制着模式(ANSI vs. Unicode),所以 AnsiString 仍然可以支持

{灰底字取自峪飞鹰翻译的文章}

看似简单的变化其实蕴藏着大量的改变,基本上原有项目中只要有字符运算的地方都会有错误陷阱,更可怕的是编译器对一些错误无法提示给你。Delphi一向自诩的“向下良好的兼容性”成为一句笑话,且在自身最艰难的时刻。

最好的办法就是老项目不要迁移到2009上来,新项目可以试着在2009上练练手,不过最好不要用于正式开发,这个12.0.3170.16989还是有bug的。

禁果是最好吃的,在几乎绝望的时候,无意中发现国外牛人Andy给出了一个折中的办法来解决这个大难题,用插件来实现在delphi2009 IDE中编译器选择编译,(前题是你有2007等其它版本的delphi编译器,说白了机器中要有其它版本的delphi),http://andy.jgknet.de/misc/CompilerPlugin1BETA.zip,运行压缩包中的CompilerPluginReg.exe,自动检测选择旧版编译器,安装,完成后运行delphi2009,在Tools菜单中会增加一个新菜单,同时工具栏上会有编译器版选择条。

用2009、2007的编译器编译运行如下代码:
procedure TForm1.FormCreate(Sender: TObject);
var
Buffer: array[0..MAX_PATH - 1] of Char;
begin
Form1.Caption:='Buffer的长度是:'+IntToStr(SizeOf(Buffer));
end;
运行结果正常,真是太好了,不过由于是测试版作者提醒大家小心使用。
题外话:MSBuild本来就是可以配置编译器的,不知用它可不可以实现该功能呢?!,有经验的朋友不妨研究一下,或许会有发现。
posted on 2008-11-21 13:24  网语飘飘  阅读(427)  评论(0)    收藏  举报