Enviando um array dinâmico (dentro de um registro) através do Socket?

Eu estou tentando transferir um registro do servidor para o cliente, usando diretamente .SendBuf ().

no entanto, esse registro tem um membro que é um array dinâmico, e eu li em algum lugar (aqui em SOF) que ao enviar registros, os membros devem ser STATIC (comprimento fixo), mas o problema é ... não posso determinar como muitos argumentos que eu enviaria (no futuro).

Como posso resolver este problema?

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;

Eu descobri de onde eu li, aqui:ReceiveBuf de TCustomWinSocket não funcionará com matrizes dinâmicas para o buffer

questionAnswers(2)

yourAnswerToTheQuestion