У меня есть Delphi lib, которая должна возвращать информацию, прочитанную через сокет.
function GetBufferInfo(Address: PChar): PChar; export; stdcall;
var
BD: TBufferData;
begin
BD := TBufferData.Create;
Result := PChar(TBufferData.GetData);
BD.Free;
end;
В классе TBufferData есть метод ReadData, который вызывается при срабатывании события чтения сокета. Так что его можно вызывать несколько раз, пока вся информация не будет прочитана. Проблема в том, как ждать, пока информация читается, и не выходить из метода GetBufferInfo. Я думал о темах, но не знаю, как именно это можно сделать.
Я создал небольшой пример, демонстрирующий проблему:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes, Windows;
type
TBufferData = class
private
FResult: string;
public
constructor Create;
procedure ReadData(Sender: TObject; Buf: string; var Size: Integer);
function GetData: string;
end;
{ TBufferData }
var
BD: TBufferData;
s: string;
{ TBufferData }
constructor TBufferData.Create;
begin
FResult := 'Some text received via socket';
end;
function TBufferData.GetData: string;
begin
Result := FResult;
end;
procedure TBufferData.ReadData(Sender: TObject; Buf: string; var Size: Integer);
begin
//info is being received from socket
FResult := FResult + Buf;
end;
begin
BD := TBufferData.Create;
s := BD.GetData;
Writeln(s);
BD.Free;
Readln;
end.
Заранее спасибо
Yura