WinSock: Как отправить () тип PByte? - PullRequest
1 голос
/ 16 апреля 2019

Во-первых, я хочу знать, эквивалентен ли тип PByte BYTE* (указатель байта) в C ++. В отрицательном случае, что может быть на Delphi ближе к BYTE* C ++?

Хорошо, предположим, что я прав в том, что PByte равен BYTE* (C ++), а затем, основываясь на следующем коде C ++, как send() этот тип данных (PByte) правильно использует родной WinSock?

См:

C ++:

SOCKET sock;
BITMAPINFO bmpInfo;
BYTE *bytes = NULL;
BYTE *temp_bytes = NULL;
DWORD workSpaceSize, fragmntWorkSpaceSize, size;

 RtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_LZNT1, &workSpaceSize, &fragmntWorkSpaceSize);

 bytes = (BYTE *) Alloc(bmpInfo.bmiHeader.biSizeImage);
 temp_bytes = (BYTE *) Alloc(bmpInfo.bmiHeader.biSizeImage);
 BYTE *memory = (BYTE *) Alloc(workSpaceSize);

 RtlCompressBuffer(COMPRESSION_FORMAT_LZNT1, 
             bytes, 
             bmpInfo.bmiHeader.biSizeImage, 
             temp_bytes, 
             bmpInfo.bmiHeader.biSizeImage, 
             2048,
             &size,
             memory);

 free(bytes);
 free(memory);

 if(Send(sock, (char *) temp_bytes, size, 0) <= 0) return;

 free(temp_bytes);

Delphi:

var
 Sock: TSocket;
 bmpInfo: TBitMapInfo;
 bytes: PByte = nil;
 temp_bytes: PByte = nil;
 memory: PByte;
 workSpaceSize, fragmntWorkSpaceSize, Size: Cardinal;

 //...

RtlGetCompressionWorkSpaceSize(COMPRESSION_FORMAT_LZNT1, @workSpaceSize, @fragmntWorkSpaceSize);

bytes := AllocMem(bmpInfo.bmiHeader.biSizeImage);
temp_bytes := AllocMem(bmpInfo.bmiHeader.biSizeImage);
memory := AllocMem(workSpaceSize);

RtlCompressBuffer(COMPRESSION_FORMAT_LZNT1, bytes, bmpInfo.bmiHeader.biSizeImage, 
                  temp_bytes, bmpInfo.bmiHeader.biSizeImage, 2048, @Size, memory);

FreeMem(bytes);
FreeMem(memory);

if send(Sock, temp_bytes^, Size, 0) <= 0 then Exit;

FreeMem(temp_bytes);
  • Ссылка на RtlGetCompressionWorkSpaceSize() и RtlCompressBuffer() функции в C ++ .
  • Ссылка до RtlGetCompressionWorkSpaceSize() и RtlCompressBuffer() функции в Delphi .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...