GARANTIR DESCONTO

Fórum Problema array e parametro #345450

03/09/2007

0

Olá amigos,

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

Romulocpd

Responder

Posts

03/09/2007

Massuda

Experimente assim...
type 
  RegCliente = Record
    Codigo: Integer;
    Nome: String;
  end;
  TArrayOfRegClient = array of RegClient;

procedure RetornarClientes(pNome: String; var pAR: TArrayOfRegClient);
....
...Delphi tem umas regras estranhas com relação a usar ´array of´ como parametro de procedures/functions.


Responder

Gostei + 0

03/09/2007

Romulocpd

Massuda,

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!


Responder

Gostei + 0

03/09/2007

Massuda

...minhas classes utilizarão ele externamente, até uma solução melhor.
Não existe solução melhor :shock:, a solução é essa mesma. As regras do Delphi fazem com que ´array of´ seja interpretado de modo diferente do usual quando usado como parametro de função/procedure.

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;
...que pode ser usado assim..
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]);



Responder

Gostei + 0

03/09/2007

Romulocpd

Obrigado Massuda pela ajuda.

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!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar