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?