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

来源:互联网 发布:淘宝卖家怎么找人刷单 编辑:程序博客网 时间:2024/05/19 23:27

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

在 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^)/
原创粉丝点击