Ponteiros de Eventos x Interfaces

Delphi

12/05/2004

Não Tô conseguindo escrever uma classe que ´mapeia´ seus eventos em métodos de um objeto interfaceado(dá um erro de parâmetros inválidos), porém se, ao invés de uma interface eu usar uma classe com métodos abstratos, funciona perfeitamente.

  //interface de mapeamento
  IAdaptadorDeEventos = interface
  [´{D40B150D-8E97-4FF2-B405-81CE35917A3A}´]
    procedure AfterUpdateRecord(Sender: TObject; SourceDS: TDataSet;
      DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind);
    procedure BeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet;
      DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var         Applied: Boolean);
    procedure OnUpdateData(Sender: TObject; DataSet:  TCustomClientDataSet);
    procedure OnUpdateError(Sender: TObject; DataSet: TCustomClientDataSet;
      E: EUpdateError; UpdateKind: TUpdateKind; var Response: TResolverResponse);
    procedure AfterApplyUpdates(Sender: TObject; var OwnerData: OleVariant);
    procedure BeforeApplyUpdates(Sender: TObject; var OwnerData: OleVariant);
  end;

//classe que mapeia seus eventos
function TCustomProvedorPacotes.AplicaAtualizacoes(Delta: OleVariant;
  Adaptador: TCustomAdaptadorDeEventos): OleVariant;
var ErrorCount : integer;
begin
  with FProvider do
    begin
      //Mapeia os métodos do adaptador nos eventos do provider
      BeforeUpdateRecord := Adaptador. BeforeUpdateRecord;  //erro aqui
      AfterUpdateRecord := Adaptador.AfterUpdateRecord;
      OnUpdateData := Adaptador.OnUpdateData;
      OnUpdateError := Adaptador.OnUpdateError;
      BeforeApplyUpdates := Adaptador.BeforeApplyUpdates;
      AfterApplyUpdates := Adaptador.AfterApplyUpdates;
      //aplica as atualizações e retorna o pacote atualizado
      Result := ApplyUpdates(Delta,0,ErrorCount);
    end;
end;


Será que alguém pode me explicar porque não posso usar as interfaces nesse caso ?

Qualquer ajuda será bem vinda.

obrigado.


Ruben

Ruben

Curtidas 0

Respostas

Comodelphi

Comodelphi

12/05/2004

pelo que vi vc está implementando direto na unit que o editor de typeLibrary do delphi cria, e isso não é uma boa, deve haver uma outra unit que o delphi cria para vc implementar o método.


GOSTEI 0
Comodelphi

Comodelphi

12/05/2004

Tá Usando DataSnap?


GOSTEI 0
Beppe

Beppe

12/05/2004

1) Quem é FProvider?
2) Mapear para que fim?


GOSTEI 0
Ruben

Ruben

12/05/2004

Eu tô criando uma biblioteca de classes para criar servidores.
Não estou usando DataSnap, nem mexendo em nenhuma type lybrary
Em uma das classes da minha biblioteca, eu tenho um método que vai executar um applyupdates em um provider(que está no mesmo projeto),
outro parâmetro desse método é um objeto interfaceado , cujos métodos eu desejo chamar a partir dos eventos desse mesmo provider.
Como esse objeto interfaceado pode ser de mais de um tipo, eu tô usando a interface ao invés da classe. No entanto, isso não compila, então eu troquei a interface por uma classe abstrata.


GOSTEI 0
POSTAR