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
a FreeLibrary ?:>
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 :)
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.
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
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;
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));
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...