RTI + dynamiczne wywolywanie procedury z BPLki :(

0

Witam.

Mam następujący problem:

W Bpl tworze klase Klasa1 dziedziczaca po TForm i mam do niej nastepujaca procedure
procedure Klasa1.Otworz(q1: TQuery)

po sekcji finalization w BPLce rejestruje klase.

initialization
RegisterClass(Ttqu);

W aplikacji laduje BPL dynamicznie i chce sie dostac wywolac procedure ale jako mi to nie wychodzi:(
Ponizej kod;

procedure TPKGLoader.InvokeMethod(bplName, methodName : String);
var
     
     Otworz : procedure(Q1 TQuery);
     klasa : TPersistentClass;
     cust : TCustomForm;
     curQuery : TQuery;
begin
    
                klasa :=GetClass('Klasa1');


                if klasa <> nil then
                begin


                    cust := TComponentClass(klasa).Create(Application)as TCustomForm;
                    if cust <> nil then
                     begin
                          @Otworz := cust.MethodAddress('Otworz');
                           Otworz(curQuery);  //do Query jest wczesniej przypisane inne query
                        
                     end;
                
                end;
                
end;

No i nie dziala:( Nie wiem o co biega czy zle rzutuje typy, czy cos innego:( Jesli ktos ma jakies wskazowki to bede wdzieczny za podpowiedzi.

0

zrób interfejs..

IFormOpenMethod = interface
['{3DE8B91F-DE5C-4E62-B869-87092090E6C8}']
procedure Otworz();
end

Dodaj do Klasy formy a pozniej pobierz ten interefsj i go wykorzystaj

  if (cust.GetInterface(IFormOpenMethod, oInterface)) then begin
    try
      oInterface.Owtorz();
    finally
      oInterface := nil;
    end;
  end;
0

Problem byl dosc trywialny - dostalem BPLke w której metoda do wywolania byla publiczna, przy ingerencji w źródłach i zmienieniu jej na published mogę pobrać już jej adres :]

Mam teraz pytanko co zmieni w metodzie Otworz żeby nie sypało błędami?

procedure Klasa1.Otworz(var q1: TQuery);
begin
  u_id := q1['id'];
  self.ShowModal;
end;

przy self.ShowModal wyskakuje blad AccesViolation. Jak się tego pozbyć?

1 użytkowników online, w tym zalogowanych: 0, gości: 1