现有 Delphi 项目迁移到 Tiburon 中的注意事项

在Tiburon更新后,支持了更多类型的指针运算。通过编译条件{$pointermath}

======================================================
注:本文源代码点此下载
======================================================

在 tiburon

更早的版本中,并不是所有的指针类型都支持指针运算。因为这样,为了让无类型指针也支持指针运算,许多代码都将其转化成 pchar

操作。现在,可以使用 tiburon 中的新编译条件 {$pointermath}

来指示编译器允许指针运算,特别是允许 pbyte 的指针运算。{$pointermath on/off}

可以打开/禁止对任意指针变量的运算,增减指针实际操作的是指针元素的大小。

下面的例子是一个将某类型指针转换成 pchar 后的指针运算:

function tcustomvirtualstringtree.internaldata(node: pvirtualnode):

pointer;

begin

if (node = froot) or (node = nil) then

result :=

nil

else

result :=

pchar(node) + finternaldataoffset;

end;

您应该将其修改成 pbyte 而不是 pchar:

function tcustomvirtualstringtree.internaldata(node: pvirtualnode):

pointer;

begin

if (node = froot) or (node = nil) then

result :=

nil

else

result :=

pbyte(node)

+

finternaldataoffset;

end;

在上面的例子中,node 真实的数据不是 pchar 的数据。将其强制转换成 pchar

的操作在早先的版本中是正常的,因为早先版本中

sizeof(char)

== sizeof(byte)。但是现在不同了,所以这样的代码必须从 pchar 改换成 pbyte。如果不做这样的更改,返回的

pointer 将指向错误的数据。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值