Wieso? Der Pointer (Buffer) wird nicht verändert. Er enhält eine Adresse, an der mindestens 'Count' Bytes reserviert sind. So. Du übergibst die Adresse und hinterher steht an der Adresse etwas drin. Die Adresse selbst wird nicht verändert. Also wird diese auch als 'Call by Value' übergeben. Wenn Du das nicht machen würdest, hast Du etwas nicht richtig verstanden.
So, nun zu deinem Code: Der Aufrufer reserviert Speicher, der von der aufgerufenen Methode gefüllt wird.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var pc: PChar;
begin
FValue := Edit1.Text;
getmem(pc, Length(FValue) + 8 + 1); // DER AUFRUFER RESERVIERT DEN SPEICHER
GetValue(pc);
lbOut.Caption := StrPas(pc);
...
FreeMem(pc, Length(FValue) + 8 + 1); // UND GIBT IHN WIEDER FREI ("Wer Müll macht, muss aufräumen")
end;
procedure TForm1.GetValue(p: PChar);
begin
Move (@FValue[1],p, SizeOf(FValue[0]) * Length(FValue)); // Verschiebe Bytes (1 Zeichen könnte auch 2 Bytes lang sein(
end;