Einzelnen Beitrag anzeigen

hzzm

Registriert seit: 8. Apr 2016
103 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: Populate Array of procedure of object

  Alt 1. Feb 2018, 08:14
Vielen Dank fuer Eure Antworten.

Das Problem ist, dass procedure of Object nicht gleich procedure ist. Letzteres ist ein einfacher Funktions-Zeiger, während Ersteres ein Methodenzeiger ist, welcher an eine Instanz gebunden ist. Habe grade leider kein Delphi zum Testen zu Hand, aber probier es mal mit RelodAdapterInstance.UpdateView1 , etc. Also mit einer konkreten Objektinstanz.
Mein Code hat es nicht eindeutig gezeigt; in meinem Fall waere das dann Self.UpdateView001. Das aendert leider nichts. Selbst die Deklaration als Procedure; anstatt Procedure of object; bringt die exakt gleichen Probleme (gleicher Compiler-Fehler).

Minimalbeispiel:
Delphi-Quellcode:
updateProcedures := TUpdateProcedures.Create(); // geht
   updateProcedures := []; // geht
Ja, das geht beides. Aber dann
Delphi-Quellcode:
updateProcedures := TUpdateProcedures.Create(); // geht
   updateProcedures := [UpdateView001, UpdateView002]; // geht nicht
'TUpdateProcedure' und 'procedure, untyped pointer or untyped parameter'

Vielleicht liegt mein Fehler in der Struktur, deshalb nochmal vollstaendiger:
Delphi-Quellcode:
type
  TUpdateProcedure = Procedure of object;
  TUpdateProcedures = TArray<TUpdateProcedure>;
  TReloAdapter = class(TInterfacedObject, IModelUpdater)
  private
    UpdateViewProcedures: TUpdateProcedures;
    procedure UpdateView001;
    procedure UpdateView002;
  public
    constructor Create;
  end;

var
  ReloAdapter: TReloAdapter;

implementation

constructor TReloAdapter.Create;
begin
  UpdateViewProcedures := TUpdateProcedures.Create(); // geht
  UpdateViewProcedures := [UpdateView001, UpdateView002]; // geht nicht
end;
  Mit Zitat antworten Zitat