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