AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler beim dynamischen Laden von Packages

Ein Thema von win568 · begonnen am 4. Mär 2011 · letzter Beitrag vom 17. Aug 2011
Antwort Antwort
win568

Registriert seit: 8. Sep 2008
121 Beiträge
 
#1

Fehler beim dynamischen Laden von Packages

  Alt 4. Mär 2011, 07:58
Hi Leute

Wir versuchen gerade unsere Anwendung in Packages zu unterteilen .

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 .

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.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Fehler beim dynamischen Laden von Packages

  Alt 4. Mär 2011, 11:48
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
win568

Registriert seit: 8. Sep 2008
121 Beiträge
 
#3

AW: Fehler beim dynamischen Laden von Packages

  Alt 7. Mär 2011, 08:26
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.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Fehler beim dynamischen Laden von Packages

  Alt 17. Aug 2011, 20:09
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:30 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