Den gesamten
Vcl Teil eines Programms habe ich in eine
DLL ausgelagert. Das nutzt zum Start die Prozedur Run,die sich z.B. per Rundll32.exe starten lässt.
Der Sinn dahinter ist, das andere Programme einige Funktionen nutzen können und die eigentliche Exe,die die
DLL lädt mit verschiedenen Versionen der
DLL umgehen kann. So kann man ein temporäres Update einspielen ohne andere Nutzer das Programm beenden müssen.
Leider wird mit aktivierter Prüfung Speicherplatzfreigabe immer angezeigt, dass 12 Bytes nicht freigegeben wurden. Das war schon bei XE7 so und auch mit 11.1 ist das noch so.
Heute habe ich mir mal die Zeit genommen, die Ursache zu finden.
Letztendlich liegt der Fehler in der Methode
TApplication.Run
Hier wird am Anfang ein AddExitProc aufgerufen. Bei DLLS werden diese aber
nie ausgeführt und somit auch der Speicher der verketteten Liste nicht freigegeben.
Ein
Delphi-Quellcode:
...
if not IsLibrary then
AddExitProc(...);
...
behebt das Problem.
Die 12 Bytes sind an sich nicht das Problem, aber man muss immer beim beenden die Meldung bestätigen und das hat mich schon lange gestört.