Delphi版本升级需要注意的事项

d7之后,对升级影响比较大的版本有这些:delphi2009,xe2以及xe5。

2009开始string默认为unicode,

    {$IFDEF Ver200}

    {$IF CompilerVersion >= 20}

  •     迁移旧版本把string替换成ansistring,char替换成ansichar,pstring替换成pansistring,pchar替换成pansichar。

    char占两个字节,string的每个字符也是两个字节。

    内存拷贝时使用sizeof(char)

xe2引入Firemonkey,支持64位编译

    {$IFDEF Ver230}

    {$IF CompilerVersion >= 23}

    引用的unit增加前缀 Vcl. FMX.

    64位程序兼容性问题。

  •      嵌入式汇编代码,64位下的函数参数用的寄存器发生变化。
  •      在64位下,integer依然是32位,但是指针和接口类型都是64位。因此,对指针进行加减计算时不能再强制转换为integer,考虑到同时需要生成32位和64目标代码,强制转换为nativeint。
  • firemonkey任何控件都可以作为容器。控件都是自绘的,跟vcl里面封装使用windows控件有本质的不同。
  • 选择了firemonk的图形功能和跨平台特性,就得放弃以前基于windows的vcl下的一些特殊技巧,主要是指mfc那些消息。

  • firemonkey和vcl是不同的两套框架,在同一个程序里面,二者不可得兼。

  •  

xe5支持手机开发。

  • 兼容性问题主要string。在arm下,delphi规定string必须是unicodestring,不可改写,而且从0开始索引。
  • S[i] := 'a'这种代码不能使用了。代替方法,1、字符串硬加,2、使用TStringBuilder。尽量使用tstringbuilder,可以避免内存碎片。

  • 在arm下时字符串从0开始,windows和苹果桌面系统下字符串从1开始。使用stringhelper避免问题,基于stringhelper的函数都是从0开始的!

  • S.chars[0];
    S.substring(3,5);
    S.indexof('abc',8);

     

  • 详细用法参见

  • https://www.cnblogs.com/del/archive/2013/06/14/3135002.html

  • http://blog.sina.com.cn/s/blog_44fa172f0101rtex.html

  • android不支持模态窗口,不能showmodal,用匿名函数showmodal(aproc,匿名函数和闭包d2009开始支持。

  • android下的屏幕分辨率,delphi提供的hookscale函数无法起作用。临时解决方案是修改fmx.platform.android单元的源代码。

  • 跨平台尽量不要用消息机制。

你可能感兴趣的:(Delphi版本升级需要注意的事项)