注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

鑫淼梦园的博客

圆你的梦想 从这里开始

 
 
 

日志

 
 

Delphi XE5 将Delphi Code从WinOS 迁移到iOS与Android  

2013-09-07 11:27:15|  分类: delphi xe5 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文主要参考Delphi Help中Migrating Delphi Code to iOS from Desktop一节的内容。

Delphi XE5 for iOS带来两个编译器:
  • DCCIOS32.EXE:针对iOS模拟器的
  • DCCIOSARM.EXE:针对iOS设备的
如果将桌面应用的代码迁移到这两个编译器上,需要按下面的内容重新写代码。

1.不被Delphi Mobile Compilers支持的、淘汰的数据类型

下面的数据类型不再被上面的两个编译器支持,这些数据类型要么被淘汰,要么重写代码,用可替代的数据类型替换掉:
    WideString, AnsiString, ShortString, AnsiChar, PAnsiChar, PWideChar, Openstring

Delphi XE5 将Delphi Code从WinOS 迁移到iOS与Android - 你梦我圆 - 鑫淼梦园的博客
 

上表中,对于桌面应用使用的字符或字符串演变出来的的各种类型,转到手机应用时,需要替换成String,Char,Byte,UInt8及array of byte,再配合TStringBuilder及StringHelper来使用,如此看来,大部分情况下,在手机应用中,我们只需要使用String及Char加之StringBuilder及StringHelper,这样相对变的更清晰了。实际上,看看String的声明,就知道String就是UnicodeString.
type String = UnicodeString

下面详细说明这些不被支持的类型如何处理:

1.1 WideString
一般的情况,WideString可以用String替换掉,如果你需要在移动编译器上使用WideString类型,则需要封装成4字节的Unicode字符序列,并且用两个null字符作为字符串的结束符。
1.2 AnsiString and ShortString
这里还包括衍生的类型,如UTF8String、RawByteString以及明确长度的ShortString类型,象下面这样声明的:
type TStr=string[127]
删除或者修改AnsiString与ShortString的实例,取决于原始的用法,一般情况下,用"Array of byte"(象System.Types.TByteDnyArray)足矣。
大多数情况下,需要对旧格式进行编译与解码,使用AnsiString大多数地方可以直接用默认的String类型替换。
1.3 AnsiChar
用Char或者Byte替换
1.4 PAnsiChar 与 PWideChar
如果指向的Ansi/Unicode类型的串,用String或TStringBuilder替换,如果原始的语义是调用API,则使用System.MarshaledString来处理
1.5 Openstring
System.Openstring是Delphi旧版本支持的元素,除了System.Generics.Default使用外已经在Delphi XE4中见不到了。使用"Array of byte"替换。

2.使用基于0索引的字符串

对于Delphi 移动编译器,字符串的索引从0开始,将来这可能成为标准,即Delphi所有的编译器对String的处理都从0开始,所谓0索引,指在字符串中第一个字符的索引值为0.
Delphi XE5 将Delphi Code从WinOS 迁移到iOS与Android - 你梦我圆 - 鑫淼梦园的博客
 
建议对基于1索引的字符串或者操作字符串中的字符的代码都重写。
两种情况:
0索引的字符串:对于用1索引操作字符串内的字符的代码,用0索引来重写
不可变的字符串:如果想改变一个不可改变的字符串内的字符,用TStringBuilder或者使用TStringHelper.
例如:象下面常见的操作不能用于不可变的字符串:
S[1] := 'A';
如果这样写,Delphi mobile compilers 将提出一个警告:W1068:Modifying strings in place may not be supported in the future(delphi).通过Project options,也可将此警告信息改成错误提示。

2.1 建议使用TStringHelper来处理Strings

编译独立于平台的字符串的处理代码,这个类是最好的,由于他进行了内部的自动处理,所以可以同时处理0索引与1索引的字符中,在其内部的实现上都是基于0索引的。对于Delphi RTL中基于1索引的函数,均可用TStringHelper来替换掉:
Delphi XE5 将Delphi Code从WinOS 迁移到iOS与Android - 你梦我圆 - 鑫淼梦园的博客
 

2.2 编译时检测对不可变的String是否进行了直接操作

为了检测到对不可变的String做了直接操作,按下面处理:
设置编译指令:{$WARN IMMUTABLE_STRINGS <ON|ERROR>}.
在Project Options中设置,如下图,将False改成True.
Delphi XE5 将Delphi Code从WinOS 迁移到iOS与Android - 你梦我圆 - 鑫淼梦园的博客
 
  评论这张
 
阅读(427)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017