Witam!
To już moje drugie pytanie w ciągu tygodnia - nie jest dobrze ;-)
A więc tak. Mam formę w pliku DLL i eksportuję z niego parę funkcji, m.in. ShowForm, która tworzy dynamicznie nową instancję formy i ją pokazuje. Problem leży w tym, że gdy taką formę zamknę [x] to nie jest zwalniana pamięć po niej.
Pytanie jest oczywiście takie: czy i jak można automatycznie zwalniać pamięć po zamykanej formie.
Na razie wymyśliłem takie rozwiązanie:
W OnCloseQuery zabraniam zamykania formy i powiadamiam program główny, że dana forma ma być zamknięta. Aplikacja nadrzędna dostaję taką informację i wywołuje specjalną eksportowaną funkcję, która zwolni pamięć wskazanej formy.
Trochę to przypomina ping-pong, ale chyba tak to będzie musiało wyglądać. Szczególnie, że każdy obiekt w programie głównym (jego wizualną reprezentacją jest właśnie ta forma) musi posiadać swoje niezależne zmienne, więc chyba utworzę wektor struktur. W każdej strukturze dam potrzebne mi zmienne oraz pole, które będzie wskaźnikiem do formatki. Wtedy powyższa funkcja ShowForm będzie dodawała do wektora nową strukturę, tworzyła dynamicznie formę i jej wskaźnik przypisywała do odpowiedniego pola.
Wtedy przy zamykaniu formy aplikacja główna będzie wywoływała funkcję, która zwolni zarówno pamięć po formie, jak i wyrzuci daną strukturę z wektora.
Co o tym myślicie - czy to dobry pomysł? A może ktoś ma ciekawsze rozwiązanie? Jeśli coś jest niejasne, to pytać. Wyjaśnię.