Ich würde sagen die Ursache ist, dass in DeallocateHWnd() die Procedure Windows.UnregisterClass() nicht aufgerufen wird, wenn das letzte Wnd-
Handle freigegeben wird.
Eigentlich müsste die
VCL bei AllocateHWnd() einen Zähler hochzählen und bei DeallocateHWnd() um eins runterzählen.
Wenn Zählerstand = 0, dann UnregisterClass() aufrufen.
Aber so bleibt die Windows-Klasse 'TPUtilWindow' registriert.
Bei einer normaler Anwendung kein Problem; nur eben bei einer
DLL.
Mögliche Abhilfe (ungetestet, reine Vermutung):
Delphi-Quellcode:
const
DLL_PROCESS_DETACH = 0;
DLL_PROCESS_ATTACH = 1;
DLL_THREAD_ATTACH = 2;
DLL_THREAD_DETACH = 3;
procedure LibraryProc(Reason: Integer);
begin
case Reason of
DLL_PROCESS_DETACH:
Windows.UnregisterClass('TPUtilWindow', HInstance);
end;
end;
...
begin
DLLProc := @LibraryProc;
LibraryProc(DLL_PROCESS_ATTACH);
end;