AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi DLL mit Runtime-Packages: Entladehemmung!?
Thema durchsuchen
Ansicht
Themen-Optionen

DLL mit Runtime-Packages: Entladehemmung!?

Ein Thema von BGeers · begonnen am 25. Jun 2007 · letzter Beitrag vom 24. Sep 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#11

Re: DLL mit Runtime-Packages: Entladehemmung!?

  Alt 24. Sep 2007, 18:11
Wenn du ladbare DLLs mit Packages kombinierst dann müssen gewissen Regeln eingehalten werden:

1.) alle DLLs müssen Packages benutzen, und zwar alle Packages die benötigt werden
2.) niemals ShareMem oder FastMM oä. benutzen das ist absolut unnötig und fehleranfällig. Da alle Objekte über die RTL und damit über das System-Package alloziert werden hat man in diesem Moment sowieso einen gemeinsam benutzten Memory Manager, auch ohne ShareMem !
3.) alle gemeinensam zu benutzenden Klassen gehören in Packages
4.) alle "unsichtbaren" Klassen wie die speziellen Formulare, Reporte usw. können in den DLLs verbleiben. Der Aufruf von is und as auf solche "privaten" DLL-Klassen muß dann ein Vergleich mit der in Packages implementierten Vorfahrklassen sein. Also zb. Self is TForm oder Self is TCustomForm, aber nicht Form12 is TDLL_Form15 wobei Form12 zb. in DLL_12 und die Klasse TDLL_Form15 in DLL15 implementiert wurde.

Somit gilt: die Packages stellen eine gemeinsam benutzten Brückenkopf zwischen den nachladbaren und privaten Endstellen in Form einer DLL dar.

Dann musst du sehr genau überprüfen welche 3'rd Party Packages du einbindest. Sehr oft haben deren Entwiker nicht berücksichtigt das deren Packages eben auch zur Laufzeit geladen und entladen werden können. Zb. Report Builder oder QuickReport. Beispiel: Hauptanwendung ist 34kB große EXE und lädt ein allgemeines TMainForm aus einem Package "Main" für die Anwendung. Diese EXE importiert aber eben nicht statisch schon die Report Packages. Erst wenn über das TMainForm eine DLL geladen wird, zb. ein Report in einer DLL, werden in diesem Moment auch alle zusätzlichen Packages für diese DLL nachgeladen. Wird nun der Report freigegeben und daraufhin diese DLL wieder entladen so werden auch diese Packages autom. wieder entladen. Nun benutzen aber einige der Komponenten in solchen Packages globale Hooks, zb. Application.OnMessage() als Events. Diese werden meistens in der Initialization/Finalization Sektion einer Unit installiert und wieder deinstalliert (wenn überhaupt deinstalliert wird). Sowas bringt massive Probleme mit sich. Einfach weil die Entwickler dieser Komponenten nicht daran gedacht haben das ihre Packages nicht statisch sondern dynamisch geladen und eben auch wieder entladen werden. Abhilfe ist es dann in der Main.EXE der Anwendung diese Packages sofort und einmalig nachzuladen, oder aber die Formular/Report-DLLs einmal geladen nicht wieder zu entladen.

Die Sache ist also: entweder mit Packages arbeiten und dann aber richtig und absolut konsequent oder erst garnicht damit anfangen. Alle nachladbaren Module in DLLs packen, aber mit dem Hintergedanken das deren darin implementierten Klassen absolut privat sind. Das ist sogar von Vorteil da man so mit sauberen Schnittstellen Modulübergreifend arbeiten muß und einer striktere Modularisierung entsteht.

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz