recv():常量对象不能作为var参数传递(在此函数的第二个arg上)

问题描述 投票:0回答:1

我需要制作一个跟随C代码的Delphi版本,现在我得到错误说“不被允许”:PByte +一个Integer值的值,传递给recv()函数的第二个arg。

您对可能的解决方案有所了解吗?

这是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;
sockets delphi winsock delphi-10-seattle recv
1个回答
3
投票
var
  data: PByteArray;
//...

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

repeat
   read := recv(Sock, data[bytesRead], Size - Cardinal(bytesRead), 0);
© www.soinside.com 2019 - 2024. All rights reserved.