Einzelnen Beitrag anzeigen

oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Problem mit GetClass in stat. App bei dyn. geladenen Pac

  Alt 11. Mär 2009, 06:33
Moin,

ich habe jetzt gründlich aufgeräumt. Alle Units sind nur noch in einem Package eingebunden. In meiner Exe habe ich dann mein BasePackage in der Rubrik "Laufzeitpackage verwenden" zusammen mit "rtl" und "vcl" eingetragen und erfolgreich kompiliert. Das lief dann auch ohne die zuvor erwähnten Fehler ab.

Dafür erst mal Dank!

Jetzt hat sich folgendes herausgestellt. Ich lade mein SpecialPackage zur Laufzeit mittels LoadPackage. Die in diesem Package registrierte Fensterklasse TMySpecialForm wird durch GetClass gefunden. Die Prüfung mit "is" ist erfolgreich. Leider werden aber alle in BasePackage definierten und registrierten Fensterklassen jetzt nicht mehr erkannt. Alle Registrierungen erfolgen in den entsprechenden Units mittels RegisterClass im initialization-Teil der Unit.
Ich habe dann in einer Unit des SpezialPackage im initialization-Teil alle Fenster des BasePackage noch einmal mittels RegisterClasses aufgenommen. Siehe da, jetzt werden sie erkannt.

Ich hatte eigentlich gehofft, dass ich durch die Einbindung des Packages BasePackage als Runtimemodule das in dem nachzuladenden Package nicht mehr tun muss. Ich habe den Hinweis zur Klassenregistrierung in der Unit Classes zwar wahrgenommen, wie das aber konkret abläuft und sich auswirkt hab ich noch nicht verstanden. Auch das Thema "Modulgrenzen" ist mir so nicht richtig klar geworden.
Im Grunde ist mein "Hauptmodul" ja meine Exe. Diese hat das Package BasePackage, angegeben als Runtimepackage, eingebunden. Damit sollte es doch alle registrierten Klassen aus BasePackage kennen. Würde meine Exe jetzt die Klasse aus dem nachgeladenen SpezialPackage nicht kennen, so könnte ich das verstehen. Aber es ist genau umgekehrt. Der Code in meiner Exe erkennt die Klassen aus dem nachgeladenen Spezialpackage, aber nicht die Klassen aus BasePackage. Für mich ist das grad mal verkehrte Welt.

Ich habe auch gerade mal eine Idee getestet. Bevor ich das SpezialPackage lade kennt meine Anwendung die registrierten Klassen. Nach dem Laden nicht mehr. Wird da vielleicht im Hintergrund das BasePackage der Exe entladen, damit das in "erforderlich" eingetragenen BasePackage des geladenen SpezialPackage verwendet wird? Da fällt mir ein, dass in den Finalization-Teil der Fensterunits auch ein UnregisterClass für die Fensterklassen aufgenommen habe.


Mal schauen, wenn einer eine Idee hat, her damit.

Und wieder Dank im Voraus,

Gruß oki
42
  Mit Zitat antworten Zitat