Einzelnen Beitrag anzeigen

neubert

Registriert seit: 17. Okt 2012
32 Beiträge
 
#1

Seit Delphi 10.4 crasht mein Programm bei LoadPackage ohne verwertbaren Hinweis

  Alt 2. Nov 2021, 18:01
Hallo,

ich habe ein Programm mit etwa 20 Runtime-Packages und einer Reihe von Packages von Embarcadero (resdistributables) und von Drittanbietern. Die .bpl- und teils .dll-Dateien habe ich in Unterverzeichnissen zur .exe-Datei abgelegt. Die .exe-Datei beinhaltet einen Bootstrapping-Mechanismus, der die Libraries der Reihenfolge nach lädt und dann aus dem Main-Package das eigentliche Hauptprogramm (VCL-Applikation) startet. Gründe: 1) Ich mag die Bibliotheken gerne fein säuberlich getrennt in individuellen Unterverzeichnissen (meine, Embardcadero, Drittanbieter). 2) Ich will steuern, welche Packages in welcher Reihenfolge geladen werden, um zu verhindern, dass versehentlich irgendwo anders liegende alte Versionen automatisch geladen werden, und um zu sehen, ob die Abhängigkeitsstrukturen innerhalb der Package-Familie stimmen.

Das lief wunderbar bis Delphi 10.3.3 CE. Nun versuche ich auf Delphi 10.4 CE umzusteigen. Zunächst waren kleinere Änderungen im Code erforderlich, weil sich Signaturen geändert haben oder der Compiler pingeliger ist. Danach ließ sich das Gesamtwerk compilieren.

Allerdings crasht nun schon der Bootstrapping-Ablauf irgendwo, ohne dass der Debugger mir einen sinnvollen Call-Stack liefert. Ich habe in den letzten drei Wochen schon unzählige Stunden damit verbracht, der Ursache auf die Schliche zu kommen. Je nachdem, wie ich den Ablauf strukturiere, crasht es mal, nachdem die Indy-Library geladen ist oder bei der initialization des Main-Package oder oder oder. Mal ist es eine Access Violation, mal eine Priviledged Instruction.

Nur wenn ich alle .bpl- und .dll-Dateien zusammen mit der .exe in ein Verzeichnis werfe, alle Packages als Runtime-Packages in den .exe-Optionen angebe und die Main-Unit einbinde, um Delphi das automatische (verzögerte) Laden zu überlassen, läuft das Programm durch. Wenn ich stattdessen auch nur folgendes minimale Programm laufen lasse, crasht es bei der initialization der Main-Unit:

Code:
begin
  SetDllDirectory(PWideChar('C:\PfadZuDenLibs\'));
  LoadPackage('bnMain270.bpl');
end.
Endlose Google-Suchen waren ergebnislos. Ich bräuchte bitte mal einen heißen Tipp, wie ich dem Problem auf die Schliche kommen kann.

Viele Grüße
Boris
  Mit Zitat antworten Zitat