Fórum Problema array e parametro #345450
03/09/2007
0
Preciso retornar ou passar um array por referência e não consigo. Procurei no forum e não achei nada de interessante.
No meu sistema quero isolar a interface de qualquer acesso a dados, quero tudo via objetos mesmo. Desta forma, por exemplo, eu criei um Record chamado RegCliente.
type RegCliente = Record Codigo: Integer; Nome: String; end;
Tenho um método na clase TCliente chamado RetornarClientesPeloNome e neste momento ou eu posso passar por referencia um array of RegCliente ou eu poderia retornar um. Para retornar um não consegui nem a pau. Para passar por referencia consegui assim (não dá erro na compilação, mas sim na execução).
procedure RetornarClientes(pNome: String; var pAR: array of RegCliente); begin SetLength(pAR, 20); end;
No comando SetLength ele dá erro na primeria execução e depois na compilação também. Se eu criar um array dentro da procedure não dá erro algum.
Alguma sugestão?
Obrigadão!
Romulocpd
Curtir tópico
+ 0Posts
03/09/2007
Massuda
type RegCliente = Record Codigo: Integer; Nome: String; end; TArrayOfRegClient = array of RegClient; procedure RetornarClientes(pNome: String; var pAR: TArrayOfRegClient); ....
Gostei + 0
03/09/2007
Romulocpd
Tentei de tudo e não adianta. Como parâmetro ou retorno esquece. Mas sua dica foi bem sucedida!
Eu na classe criei um objeto TARClientes por exemplo e minhas classes utilizarão ele externamente, até uma solução melhor.
Se tiver sugestões!!!
Valeu!
Gostei + 0
03/09/2007
Massuda
Normalmente ´array of´ significa um ´array dinamico de algum tipo de dado´, mas quando usado como parametro de função/procedure, significa ´array de algum tipo de dado´ (note que não tem o dinamico). Isso permite que você escreva funções/procedures que operam sobre um array qualquer (desde que o primeiro elemento do array tenha índice zero). Um exemplo seria...
function Somar(const ALista: array of Real): Real; var I: Integer; begin Result := 0; for I := Low(ALista) to High(ALista) do Result := Result + ALista[I]; end;
var ListaDinamica: array of Real; ListaFixa: array[0..99] of Real; ... SetLength(ListaDinamica, ...); ListaDinamica[0] := ... ListaDinamica[1] := ... ... Soma := Somar(ListaDinamica); ListaFixa[0] := ... ListaFixa[1] := ... ... Soma := Somar(ListaFixa); Soma := Somar([1, 2, 3, 4]);
Gostei + 0
03/09/2007
Romulocpd
Realmente vou ver o que faço. Em .Net tem aqueles objetos ArrayList tal, vou ver o que consigo com Delphi, senão vou utilizar assim mesmo.
Obrigado!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)