Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Mit Indy TcpServer Daten in einen void* Buffer schreiben (https://www.delphipraxis.net/123970-mit-indy-tcpserver-daten-einen-void%2A-buffer-schreiben.html)

cytrinox 12. Nov 2008 12:35


Mit Indy TcpServer Daten in einen void* Buffer schreiben
 
Hi,

ich möchte ankommende Daten von einem Client in einen void* Buffer schreiben.

Die Funktion die das machen soll sieht so aus:

Delphi-Quellcode:
function my_reader(arg: Pointer; buf: Pointer; buf_size: size_t): Integer; cdecl;
var
obj            : TMpdtpConnection;
  mybuf         : TBytes;
  stream      : TMemoryStream;   
begin
   stream := TMemoryStream.Create;
  stream.SetSize(buf_size);
   if (not Assigned(arg)) or (not Assigned(buf)) then
     ShowMessage('not assigned');

   obj := TMpdtpConnection(arg);
  obj.Connection.IOHandler.ReadStream(stream, buf_size);
  stream.Seek(0, soBeginning);
  ShowMessage('moved: ' + IntToStr(stream.Read(buf, buf_size)));
  ShowMessage('readbytes: ' + IntToStr(buf_size));
  FreeAndNil(stream);
  result := 0;
end;
TMpdtpConnection is übrigens abgeleitet von TIdContext.


Ich versuche die Daten zuerst in einen MemoryStream einzulesen und dann in den Buffer (buf) zu schreiben. Der Speicher
hierfür wird von der Funktion die die my_reader() aufruft bereitgestellt (mit calloc() in C)

Wenn ich mir dann aber buf hinterher genauer ansehe (ich sende als erste zwei bytes 0xaabb) dann steht in buf an erster und zweiter stelle immer noch 00 00 (so wie von calloc ja bereitgestellt). Bevor ich jetzt alles auseinanderpflücke: stimmt das mit dem MemoryStream so überhaupt? Und kann man wenn man buf via TBytes(buf^) castet auch direkt, also ohne MemoryStream in den Buffer schreiben?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz