Einzelnen Beitrag anzeigen

Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: Get(anyPointer) Verständnisfrage

  Alt 29. Apr 2013, 21:12
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;
  Mit Zitat antworten Zitat