Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Fehler beim dynamischen Laden von Packages (https://www.delphipraxis.net/158814-fehler-beim-dynamischen-laden-von-packages.html)

win568 4. Mär 2011 08:58

Fehler beim dynamischen Laden von Packages
 
Hi Leute

Wir versuchen gerade unsere Anwendung in Packages zu unterteilen :roll:.

Wenn wir nun das Package dynamisch laden, haben wir folgende Problem: Im InitUnits (beim Durchgehen der Initialization Codes der Units) werden einige Units geladen und dann kommt es zu einer Schutzverletzung.

Ich habe nun durchgesteppt und hatte folgendes Phänomen: Sofort, wenn man in InitUnits in die Codezeile TProc(P)() reinsteppt, kommt man direkt in den Exceptionteil. Es wird nicht initialization aufgerufen, sondern einfach eine Schutzverletzung. Mit ein bißchen rumspielen mit der Reihenfolge der Units in der dpk Datei bin ich dann über einige Codestellen drübergekommen, da aber ~ 2000 Dateien drinnen sind, habe ich nach ~ 600 geladenen Units und ständigen Schutzverletzungen aufgegeben. Hat einer einen Tip ?

Wenn man in der Exe nach Initialization sucht, sieht man die Reihenfolge wie die Units geladen werden. Diese wiederrum ist unterschiedlich zu der Deklaration in der dpk. Wie zum Teufel baut der Compiler die Reihenfolge zusammen :evil:.

Ich bin noch draufgekommen, dass Units, die globale Funktionen beinhalten, auf jeden Fall vorher geladen werden müssen. Nur kann man manchmal die Reihenfolge nicht bestimmen. Und was ist mit Zirkulärreferenzen. Diese kann der Compiler bei der normalen Exe auflösen, beim Laden des Packages scheint er ein Problem zu haben.

stahli 4. Mär 2011 12:48

AW: Fehler beim dynamischen Laden von Packages
 
Eine direkte Lösung kann ich nicht anbieten, aber ich will mal nachfragen:

- welches Delphi?
- mehrere Packages?

Im letzteren Fall einen Tip:
Ich würde (um versehentliche Kreuzbezüge zwischen Packages) immer nur ein Package bearbeiten (bis dieses komplett compilierbar ist).
Andere Packages sollten nicht verfügbar sein (DCU löschen und Ordner temp. umbenennen).
So kannst Du unerwartete und unbeabsichtigte Bezüge ausschließen.

Wenn alle Packages eigenständig funktionieren, kannst Du sie in Dein Projekt einbinden.

Eine nachträgliche Aufteilung eines größeren Projektes kann schon aufwendig sein, ist aber aus Gründen der Übersichtlichkeit und Weiterverwertung schon sinnvoll.

win568 7. Mär 2011 09:26

AW: Fehler beim dynamischen Laden von Packages
 
Hi

Das Projekt besteht zwar aus mehreren Packages, diese sind aber ohne Probleme compilierbar. Auch das Laden dieser Packages ist ohne Probleme. Nur das "Hauptpackage" macht die Probleme. Diese liegen daran, dass beim Laden in den InitUnits es zu dem beschriebenen Phänomen kommt.

Das mit dem Löschen der DCU's habe ich bereits gemacht, aber hat auch nichts gebracht.

Es dürfte so sein, dass beim Laden einer Unit Delphi anscheinend die in der Unit vorhandenen Funktionen anlegt. Benötigen diese globale Variablen, dann müssen diese bereits angelegt sein, ansonsten kommt es zu einer Schutzverletzung. Binde ich die Unit ein, die diese globale Variable beinhaltet, gehts weiter. Unser Problem sind jedoch die Kreuzbezüge.

stahli 17. Aug 2011 21:09

AW: Fehler beim dynamischen Laden von Packages
 
Mal ein ganz grundsätzlicher Tipp:

Bei nicht erklärbaren Kompilierungsproblemen bei mehrerern Packages in einer Projektgruppe kann es helfen, die "erforderlichen Packages" (dcp) aus einem Package zu entfernen und neu hinzuzufügen (das hinzufügen erfolgt ja beim Kompilieren i.d.R. automatisch).
So konnte ich jetzt einen Fehler abstellen, für den ich keine logische Erklärung gefunden habe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz