Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Buffer beibringen von Indys akzeptiert zu werden

  Alt 8. Dez 2008, 02:14
Als Puffer kann man ein Array of Byte oder auch einen normalen (Ansi-)string verwenden:
Delphi-Quellcode:
var
  buf : TArray of Byte;
  readcount : integer;
begin
  SetLength(buf, 1000);
  readcount := TransferBuffer.Read(buf[0], 1000);
Die Schreibweise buf[0] sieht zwar gewöhnungsbedürftig aus, ist aber so.
Der Compiler setzt im Prinzip den Adressoperator vornean, um daraus einen Zeiger zu gewinnen:
.Read(@buf[0], 1000); Hier noch das Beispiel mit einem String:
Delphi-Quellcode:
var
  buf : string;
  readcount : integer;
begin
  SetLength(buf, 1000);
  readcount := TransferBuffer.Read(buf[1], 1000);
  // ... ein kleiner Trick...
  SetLength(buf, readcount); // String auf die tatsächliche Grösse verkürzen
  // jetzt kann mit dem String buf bequem weitergearbeitet werden
Hier muss buf[1] geschrieben werden, weil Strings in Delphi mit dem Index 1 beginnen.

Und jetzt noch mit Zeiger:
Delphi-Quellcode:
var
  buf : Pointer;
  readcount : integer;
begin
  Getmem(buf, 1000);
  readcount := TransferBuffer.Read(PChar(buf)^, 1000);
  ...
  FreeMem(buf);
Hier muss der Zeiger nach PChar gecastet werden, weil man einen neutralen Zeiger nicht dereferenzieren kann.
  Mit Zitat antworten Zitat