Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: PlugIn-Dll: TPUtilWindow freigeben / Erzeugung verhindern?

  Alt 8. Nov 2010, 18:20
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;
Andreas
  Mit Zitat antworten Zitat