эмуляция передачи данных через сокет. для примера выделения памяти на передающей и принимающей сторонах:
Код:
type
TMyRec = record
Id: String[255];
Name: String[255];
IP: String[255];
end;
var
Arr: array of TMyRec;
sz: Integer;
Buffer: Pointer;
begin
SetLength(Arr, 10); // 10 elements
Arr[5].Id:='5';
Arr[5].Name:='NumLock';
Arr[5].IP:='127.0.0.1';
sz:=Length(Arr)*SizeOf(TMyRec); // size arr in bytes = element count * size of element
// element size = size of TMyRec
ShowMessage(IntToStr(sz));
Buffer:=GetMemory(sz); // get memory for simulate socket (Buffer)
MoveMemory(Buffer, @Arr[0], sz); // transfer data to "socket"
SetLength(Arr, 0); // clear source arr
SetLength(Arr, sz div SizeOf(TMyRec)); // (sz div SizeOf(TMyRec)) how elements?
MoveMemory(@Arr[0], Buffer, sz); // receive data from "socket", sz .aka. ReceiveLength
ShowMessage(Arr[5].Id+' '+Arr[5].Name+' '+Arr[5].IP);
FreeMemory(Buffer);
end;
на реальных сокетах не будет работать потому что передаваемые данные могут и скорее всего будут разбиваться на отдельные пакеты, которые придется
складывать в один. хотя для 10 элементов может и сработает, если очень повезет)