recv():常量对象不能作为 var 参数传递(在此函数的第二个参数上)
recv(): Constant object cannot be passed as var parameter (on second arg of this function)
我需要制作以下 C 代码的 Delphi 版本,现在我收到错误提示 "not is allowed":PByte
的值 + 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;
var
data: PByteArray;
//...
data := PByteArray(AllocMem(Size));
bytesRead := 0;
repeat
read := recv(Sock, data[bytesRead], Size - Cardinal(bytesRead), 0);
我需要制作以下 C 代码的 Delphi 版本,现在我收到错误提示 "not is allowed":PByte
的值 + 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;
var
data: PByteArray;
//...
data := PByteArray(AllocMem(Size));
bytesRead := 0;
repeat
read := recv(Sock, data[bytesRead], Size - Cardinal(bytesRead), 0);