这是我的功能:如何获取Result的地址?
class function TCelebrity.ReadArray<T>(length:integer): byte;
var b:pointer;
begin
b := @Result;
if IndexR + SizeOf(T) * length > High(DataRead) + 1 then
raise Exception.Create('error');
Move(DataRead[IndexR],b,SizeOf(T) * length);
Inc(IndexR,SizeOf(T) * length);
end;
IndexR是整数,DATAREAD是字节的阵列。
该函数从IndexRef(position)的DataRead读取长度。在我的情况下,它在读取位置的4个字节0
的问题是,我想打电话这样的功能:
ar[5] := c.ReadArray<byte>(4); or - @ar[5] := c.ReadArray<byte>(4); //ar is Byte array
我知道我可以创建一个参数用指针字节数组,但我想知道是否可以这样做?
编辑:
我也尝试该功能,它改变仅AR [5]和它应该从AR [5]至AR改变[8]。
class function TCelebrity.ReadArray<T>(length:integer): byte;
var b:^byte; i:integer;
begin
b := @Result;
for I := 0 to length - 1 do
begin
b^ := DataRead[IndexR];
Inc(IndexR);
Inc(b);
end;
end;
第二个例子应该工作。如果AR [0]被放置在随后40万$ AR [1]应放置在$ 400001等。本是我的功能是什么,但不幸的是它仅适用于第一个参数。
在这段代码中我真的不明白的是为什么有一个移动到b而不是b ^?我错过了,还是复制/粘贴了原始的味精? – 2009-07-14 11:51:31