recv (): константный объект не может быть передан как параметр var (на втором аргументе этой функции) - PullRequest
0 голосов
/ 29 апреля 2019

Мне нужно сделать Delphi-версию следующего кода на C, и теперь я получил ошибку, в которой говорилось, что «не разрешено»: значение PByte + a Integer значение , передал второй аргумент функции recv().

Есть ли у вас какие-либо идеи о возможном решении?

Это версия C:

DWORD size;
BYTE *data = (BYTE *) malloc(size);
int   totalRead = 0;
do
{
  int read = recv(s, (char *) data + totalRead, size - totalRead, 0);
  if(read <= 0)
     goto exit;
  totalRead += read;
} while(totalRead != size);

И здесь быломоя попытка:

var
 data: PByte;
 read, bytesRead: Integer;
 Size: DWORD;

//...

data := PByte(AllocMem(Size));
bytesRead := 0;

 repeat
   read := recv(Sock, data + bytesRead, Size - Cardinal(bytesRead), 0);
   if read <= 0 then
   begin
    Writeln('0 received, exiting...');
     Exit;
   end;
   bytesRead := bytesRead + read;
 until DWORD(bytesRead) = Size;

1 Ответ

3 голосов
/ 29 апреля 2019
var
  data: PByteArray;
//...

data := PByteArray(AllocMem(Size));
bytesRead := 0;

repeat
   read := recv(Sock, data[bytesRead], Size - Cardinal(bytesRead), 0);
...