[Delphi] Jak wyładować dll z pamięci?

0

Napisałem plugina do jakiegos programu. Przy uruchomieniu pluga pobierane są rekordy do tablicy itp. Plugina zamykam ( Close() ; ) Jednak gdy go uruchomie ponownie dalej rekordy dalej są w tablicach, w editach dalej są wartosci, po prostu zamykana jest tylko forma ale wszystko dalej siedzi w ramie dopóki nie zrobie restarta całego programu. Jak taki plugin wyładować z pamieci gdy nie jest już potrzebny. Próbowałem Application.Terminate ale powodowało to zwis pluginu. Czy jeżeli "ręcznie" usune rekordy (SetLength(Tablica_Rekordu, -1) i wyczyszcze edity (Edit.Clear) to to cos zmieni? Wyładuje takze z pamieci? Jest to dla mnie ważne gdyż rekordy są ogromne

0

a FreeLibrary ?:>

0

yyy, chyba cos nie bardzo wiem jak to zastosować. Pojawia sie :[Error] frmMainUnit.pas(208): Not enough actual parameters . Gdzie mam to użyć? Na formie czy w bibliotece? Tu i tam kompilator nie popuszcza :)

0

Skoro piszesz plugin, to aplikacja go obsługująca powinna wywoływać FreeLibrary. Być może nie wykonujesz zamknięcia pluginu, kiedy program tego żąda, albo w pamięci pozostawiasz jakieś śmieci, nie zwalniając jej.

0
Dibo84 napisał(a)

yyy, chyba cos nie bardzo wiem jak to zastosować. Pojawia sie :[Error] frmMainUnit.pas(208): Not enough actual parameters . Gdzie mam to użyć? Na formie czy w bibliotece? Tu i tam kompilator nie popuszcza :)

FreeLibrary po zaladowaniu biblioteczki i uzyciu funkcji... w parametrze podajesz uchwyt ktory otrzymales przy ladowaniu

0

Ladowanie pluginów w tym programie chyba nie jest dynamiczne, nie moge znalezc uchwytu w SDK, w kazdym razie procedura otwierająca plugin w programie wyglada tak:

procedure Init(Command: ShortString; Index: Integer); register;
begin
case Index of
  PLUG_TEST1:
    begin
      if not Assigned(frmMain) then
        begin
          frmMain := TfrmMain.Create(nil);
          Form1:= TForm1.Create(nil);
        end;
      frmMain.Show;
    end;
end;
end;

Dobra nie wazne, powiedzcie mi tylko czy takie coś chcociaż troche zwolni pamięć:

ListView1.Clear;
SetLength(Dane, -1);
LabeledEditTemat.Clear;
RichEdit1.Clear;
0
Dibo84 napisał(a)

Ladowanie pluginów w tym programie chyba nie jest dynamiczne, nie moge znalezc uchwytu w SDK, w kazdym razie procedura otwierająca plugin w programie wyglada tak:

procedure Init(Command: ShortString; Index: Integer); register;
begin
case Index of
  PLUG_TEST1:
    begin
      if not Assigned(frmMain) then
        begin
          frmMain := TfrmMain.Create(nil);
          Form1:= TForm1.Create(nil);
        end;
      frmMain.Show;
    end;
end;
end;

Dobra nie wazne, powiedzcie mi tylko czy takie coś chcociaż troche zwolni pamięć:

ListView1.Clear;
SetLength(Dane, -1);
LabeledEditTemat.Clear;
RichEdit1.Clear;

OMG ty chyba nie wiesz o czym piszesz ;)
Ten kod jest zupelnie bez sensu jesli nie znasz reszty :P
Co do setlength to chyba lepiej

ZeroMemory(@dane,sizeOf(dane));
0

To prawda, mało wiem o bibliotekach :D , tylko że SDK jest tak ubogie że naprawde trzeba tylko skopiować kod z załączonego prykladu a reszte na formie robic, dzieki za setlength...

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