打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Delphi XE5中移动平台的字符串要注意的事项 | 武稀松(wr960204)的博客

Delphi XE5中移动平台的字符串要注意的事项

今天把项目往移动平台移植,遇到指针错误,无效地址访问.
XE5的单步调试速度太让人崩溃了.
发现错误出在一个字符串的循环上,我是for i:= 1 to length(字符串变量) do
结果报错.
看了一下XE5的DateType的帮助说明:
Note: All the string types described in this topic are supported by the Delphi desktop compilers (DCC32, DCC64, and DCCOSX).
However, the Delphi mobile compilers (DCCIOS32 and DCCIOSARM) support only the default string type (UnicodeString).
Also, with the Delphi mobile compilers, strings are 0-based and immutable; to manipulate strings, use the TStringHelper functions, which are provided for this purpose. For more information, see Migrating Delphi Code to Mobile from Desktop.

也就是在iOS和Android上字符串只有默认一种也就是UnicodeString.并且字符串的字符索引变成0开始的.而且字符串是不可变的.呃.
那我可怜的跨平台的代码啊.又要多很几行判断了.

判断方式有好多种,比如
{$IFDEF ANDROID}{$IFDEF IOS}
或者干脆如果处理器是ARM处理器就认为是移动代码
{$IF defined(CPUARM)}

补充一个悲剧的发现,尽管在移动代码中字符串以0为起始,但是Pos(‘a’,'abc’)函数返回的还是1.
var
s:string;
s := ‘abc’;
Delete(s,1,1);s变成’bc’
copy(‘abc’,1,1);返回的是’a’
也就是系统函数还都是基于1的.

实际上易博龙鼓励我们使用TStringHelper的函数:remove,delete…这些都是基于0的.

可是我要写D7-XE5的跨平台通用功能就没办法了,TStringHelper是早期版本Delphi所不支持的.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
DELPHI移动端支付宝支付
delphi 自定义产生随机字符串函数
柏林版的隐藏功能
delphi 字符串 加密 解密 函数
Delphi 自带的字符串分割函数split
Delphi 7.0常用函数速查手册
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服