這是我的功能:如何獲取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