Wie die anderen schon gesagt haben: Es ist ein Unterschied ob du ein statisches oder ein dynamisches Array hast:
Statische Arrays:
Delphi-Quellcode:
type
PIntArray = ^TIntArray ;
TIntArray = Array[0..9] of Integer;
procedure TForm1.FormCreate(Sender: TObject);
var MyArray: TIntArray;
i: Integer;
begin
for i:=0 to 9 do
MyArray[i]:=i;
TesteArray(@MyArray);
end;
procedure TForm1.TesteArray(P: Pointer);
var arr: TIntArray;
i: Integer;
begin
arr := PIntArray(P)^; // Oder TIntArray(P^)
for i:=0 to 9 do
Memo1.Lines.Add(IntToStr(arr[i]));
end;
Dynamische Arrays:
Delphi-Quellcode:
type
TIntArray = Array of Integer;
procedure TForm1.FormCreate(Sender: TObject);
var MyArray: TIntArray ;
i: Integer;
begin
SetLength(MyArray, 10);
for i:=0 to 9 do
MyArray[i]:=i;
TesteArray(Pointer(MyArray)); // Dyn. Arrays sind bereits Pointer
end;
procedure TForm1.TesteArray(P: Pointer);
var arr: TIntArray;
i: Integer;
begin
arr := TIntArray(P);
for i:=0 to 9 do
Memo1.Lines.Add(IntToStr(arr[i]));
end;
Du kannst diese beiden Array-Typen nicht so ohne weiteres mischen. Zumindest nicht auf "Pointer Ebene".
Wie über mir auch schon gezeigt wurde kannst du auch statt dem Array einen Pointer auf das erste Element des Arrays übergeben (bei beiden Array-Typen wäre das @Array[erster_index]).
Dann kannst du in deiner Methode über einen PInteger auf die Werte des Arrays zugreifen. Allerdings musst du der Methode dann zusätzlich die Anzahl der Elemente übergeben:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var MyArray: TIntArray;
i: Integer;
begin
SetLength(MyArray, 10);
for i:=0 to 9 do
MyArray[i]:=i;
TesteArray(@MyArray[0], Length(MyArray)); // Geht bei statischen Arrays genauso
end;
procedure TForm1.TesteArray(P: PInteger; Anzahl: Integer);
var i: Integer;
begin
for i:=0 to Anzahl-1 do
begin
Memo1.Lines.Add(IntToStr(P^));
inc(P); // Pointer auf das nächstes Element des Arrays setzen
end;
end;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."