Отправка динамического массива (внутри записи) через сокет?
Я пытаюсь передать запись с сервера на клиент, напрямую используя .SendBuf ().
однако эта запись имеет член, который является динамическим массивом, и я где-то прочитал (здесь, в SOF), что при отправке записей члены должны быть STATIC (фиксированной длины), но проблема в том, что ... я не могу определить, как много аргументов я бы отправил (в будущем).
Как я могу решить эту проблему ?
procedure TServerClass.SendBufToSocket(const vmName: TVMNames; const vmArgs: Array of TValue);
var
// this record is sent to client
// vmName = method to be called [in]
// vmArgs = Argument for the method [in, optional]
BufRec: packed record
vmName: array[0..49] of char;
vmArgs: Array of TValue;
end;
s: string;
i: integer;
begin
// convert enum method name to string
s:= GetEnumName(TypeInfo(TVMNames), Integer(vmName));
// copy method name to record
lstrcpy(BufRec.vmName, pChar(s));
// copy arg array to record
SetLength(BufRec.vmArgs, length(vmArgs));
for i:=0 to high(vmArgs)
do BufRec.vmArgs[i] := vmArgs[i];
// send record
ServerSocket.Socket.Connections[idxSocket].SendBuf(PByte(@BufRec)^, SizeOf(BufRec));
end;
Я узнал, откуда япрочитал это здесь:ReceiveBuf от TCustomWinSocket выигралработать с динамическими массивами для буфера