AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem mit GetClass in stat. App bei dyn. geladenen Package

Problem mit GetClass in stat. App bei dyn. geladenen Package

Ein Thema von MaBuSE · begonnen am 23. Okt 2008 · letzter Beitrag vom 12. Mär 2009
Antwort Antwort
Seite 2 von 2     12
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#11

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

  Alt 11. Mär 2009, 15:21
Achte doch mal beim Debuggen auf die Ereignisanzeige. Dort müsste es eigentlich Nachrichten beim Laden und Entladen von Packages geben. Den Fehler kann ich mir allerdings nicht erklären. Debug doch mal SpecialPackage und prüfe, ab wann Aufruf von RegisterClass GetClass('AlteKlasse') nil zurückgibt.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
oki

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

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

  Alt 12. Mär 2009, 08:40
Moin, Moin,

ich habe jetzt folgenden Zustand. Alle verwendeten Units sind jeweils nur in einem Package eingebunden. Soweit ist der Fehler U... verschwunden. Die Klassen werden auch registriert und es lässt sich ordnungsgemäß drauf zugreifen. Ein Fenster habe ich aus dem Package herausgenommen, da wurde ein externes Package verwendet. Das hatte Probleme bereitet.

Leider ist noch nicht alles im Reinen. Ich bekomme immer noch Fehlermeldungen bei der Ausführung des Programmes und die Komponenten verhalten sich im nachgeladen Package nicht so wie die Originalkomponenten. Ich durchsuche gerade meine Platte nach doppelt vorhandenen Packages. Mal schauen was das noch wird.

Erfreulich ist es nicht.

Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

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

  Alt 12. Mär 2009, 08:48
Zitat von Bernhard Geyer:
Entweder alles Runtimepackages oder gar nichts! Mixbetrieb ist nicht möglich (bzw. nur mit sehr viel Glück und vielen harten Casts).
Hat deine Anwendung keine Runtimepackages aber die DLL schon, so ist TObject der Exe <> TObject der BPL da beide vollkommen unabhängige RTTI haben!
Ich kann dem Bernhard nur recht geben. Mixbetrieb ist definitiv nicht möglich.

Glücklicherweise hatte ich im Oktober letzten Jahres die Gelegenheit mit Barry Kelly (das ist der, der bei Codegear am Compiler arbeitet) ca. 2 Stunden allein und ungestört zu sprechen. In diesem Gespräch habe ich viele Probleme, die wir mit Delphi hatten, angesprochen und teilweise gute Lösungsansätze bekommen.
Unter anderem hatte ich ihn auch nach der Problematik mit den Packages gefragt. (Siehe 1. Beitrag)
Der Mixbetrieb ist definitiv nicht möglich.

Das liegt unter anderem daran, das die Adresstabellen anders aufgebaut sind, je nachdem ob die Anwendung mit oder ohne Runtime Packages arbeitet. Es werden beim Compilieren durch den Schalter RuntimePackages viele grundlegende interne Dinge komplett anders gemacht. Es ist also nicht "nur" die verwendeten Package in die Exe gelinkt, sondern wie schon Geschieben, es wird viel mehr gemacht.

Da meine Frage beantwortet ist, werde ich das Thema (offene Frage) als beantwortet markieren.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
oki

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

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

  Alt 12. Mär 2009, 08:53
Hallo MaBuSE

Dank für die Info. Da das hier dein Thread ist werde ich meine aktuellen Themen in einem neuen Tread zur Diskussion stellen. Das Thema Runtime-Package ist auch meiner Meinung nach damit geklärt. Meine aktuellen Probleme sollten damit sicher in diesem Kontext, aber an einer anderen Stelle liegen.

Dank und Gruß oki
42
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

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

  Alt 12. Mär 2009, 09:19
Zitat von oki:
Hallo MaBuSE
Dank für die Info. Da das hier dein Thread ist werde ich meine aktuellen Themen in einem neuen Tread zur Diskussion stellen. Das Thema Runtime-Package ist auch meiner Meinung nach damit geklärt. Meine aktuellen Probleme sollten damit sicher in diesem Kontext, aber an einer anderen Stelle liegen.
Dank und Gruß oki
Nein, das ist OK.
Es geht ja um das gleiche. (Zumindest am Anfang )
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
oki

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

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

  Alt 12. Mär 2009, 10:11
Dann werd ich gleich mal das nächste Problem zu diesem Thema schildern.

Ich habe mir im Debugger die Aufrufe meiner vererbten Klasse angesehen und festgestellt, dass da ein Versatz drin ist. Das passt schon mal zu dieser Aussage:
Zitat:
Das liegt unter anderem daran, das die Adresstabellen anders aufgebaut sind, je nachdem ob die Anwendung mit oder ohne Runtime Packages arbeitet. Es werden beim Compilieren durch den Schalter RuntimePackages viele grundlegende interne Dinge komplett anders gemacht. Es ist also nicht "nur" die verwendeten Package in die Exe gelinkt, sondern wie schon Geschieben, es wird viel mehr gemacht.
So wie es aussieht trifft das jetzt genau bei mir zu. Leider drehe ich mich da im Kreis.

Meine Anwendung die das Package laden soll besitzt Formuare aus BasePackage. Konkret auch das MainForm. Somit habe ich mein BasePackage als Design- und RuntimePackage kompiliert. Ich brauch ja die Formulare und Komponenten zum Designen meiner Anwendung. Das SpezialPackage ist als Runtimepackage kompiliert und enthält ein speziellen Formular als Nachfahre eines Forms aus BasePackage. Diese SpezialPackage soll dann von meiner Anwendung zur Laufzeit nachgeladen werden.
Jetzt habe ich den Verdacht, dass meine Anwendung ja das BasePackage als Designtime-Package verwendet, obwohl ich Laufzeitpackages verwenden ausgewählt und mein BasePackage mit eingetragen habe. Wird mein SpezialPackage als Laufzeitpackage geladen, welches natürlich auch BasePackage beinhaltet, so habe ich wieder den Mischbetrieb.
Dahinter kann ich aktuell keine rechte Logik erkennen, aber die Erscheinungen lassen sich für mich mit dem gesagten erst mal nur so erklären.

Meine erste Frage ist,
Liege ich damit richtig?

Meine zweite Frage
Welche Alternative habe ich?

Gruß oki
42
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#17

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

  Alt 12. Mär 2009, 14:17
Hallo,

Aaaalso ich würde mit dem Verständnis, das ich beim Lesen dieses Threads gewonnen habe, das Design so abändern, das diejenigen Teile, die zum Designen der Anwendung unbedingt als Designpackage vorliegen müssen, als Designpackage übersetzt werden, während diejenigen Teile, die erst zur Laufzeit nachgeladen werden oder eben während des Entwurfsprozesses, konsequent als Laufzeitpackage übersetzt werden. Gemeinsam benötigte Tele ghören dann in eine gewöhnliche Unit, die von beiden Teilen verwendet wird.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

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

  Alt 12. Mär 2009, 15:40
  • Wenn "keine Laufzeitpackages" beim Kompilieren ausgewählt ist, passiert Folgendes:

    Dem Compiler sind alle Packages egal.

    Bei einem Build: (Projekt erzeugen)
    Es werden einfach alle *.pas Dateien kompiliert, die in der uses Anweisung des Programms (*.dpr) und der einzelnen Units (*.pas) angegeben sind kompiliert und dann die entsprechende *.dcu eingebunden (gelinkt). Wenn keine *.pas Datei vorhanden ist, wird direkt die entsprechende *.dcu eingebunden.

    -> Es entsteht eine Exe Datei, die alles eingebunden hat und keine Packages braucht.

    Du benötigst zum Kompilieren:
    • Deine Projektdateien (*.dpr, *.pas, *.dfm, *.res)
    • alle von Dir verwendeten *.dcu Dateien der VCL, Komponenten, ... (z.B. aus "$(DELPHI)\lib")
    Du benötigst zum Starten des Projekts:
    • Deine Exe Datei
  • Wenn „mit Laufzeitpackages“ beim Kompilieren ausgewählt ist, passiert Folgendes:

    Es wird vor dem Kompilieren der *.pas Dateien geschaut, ob diese in einem Package enthalten sind. Wenn ja, dann wird die *.dcu nicht eingebunden, sondern auf as Package verwiesen.
    Es werden also nur die *.pas Dateien kompiliert und *.dcu Dateien eingebunden, die in keinem Package enthalten sind. Also die, die zum Projekt gehören.

    Um die Anwendung starten zu können, sollten dann alle statisch verlinkten Runtime-Packages vorhanden sein.
    Natürlich werden auch alle Packages, die in dem requires Abschnitt verwendeten Packages aufgelistet sind, benötigt.

    DesignTime Packages werden zum Kompilieren nicht benötigt, sie enthalten "nur" den Code, der von der IDE benötigt wird um während der DesignTime (also der Programmerstellung in der IDE) ausgeführt zu werden.
    (Zum Beispiel Property-Editoren und Component-Editoren, Wizards, IDE-Plugins, ...)

    Du benötigst zum Kompilieren:
    • Deine Projektdateien (*.dpr, *.pas, *.dfm, *.res)
    • Packagedateien (*.dcp)
    • alle von Dir verwendeten *.dcu Dateien, die nicht in einem Package stecken.
    Du benötigst zum Starten des Projekts:
    • Deine Exe Datei
    • alle verwendeten Packagedateien (*.bpl)
    Ein Sonderfall ist ein Package, dort werden zum Kompilieren noch nicht mal die *.dcu Dateien der in requires angegebenen Package benötigt, es reicht die *.dcp Datei, in der alle relevanten Informationen der dcu's enthalten sind. Wichtig bei DesignTime Packages, zu denen die *.dcu fehlen. (z.B. Proxy.dcu)

    siehe auch Lösung: Das leidige Problem mit der DsgnIntf bzw. Proxy.dcu
Ich hoffe die Infos helfen Dir.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
oki

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

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

  Alt 12. Mär 2009, 16:51
Hallo MaBuSE,

herzlichen Dank für die Erläuterungen. Damit bin ich mir dann sicher, dass meine Exe nur mit Laufzeitpackages arbeitet und der Fehler an der Stelle nicht sein kann. Somit macht es Sinn hier weiter zu suchen, da der Fehler offensichtlich an einer anderen Stelle liegt.

@schöni: Das ist so nicht möglich. Aber mit den Erläuterungen von MaBuSE ist das dann auch nicht nötig, da es alleine auf die konsequente Verwendung der Runtimepackages ankommt. Ich denke, der einzige Fehler der hier passieren kann ist dann nur der Fall, dass man die Exe ohne Runtimepackage verwenden compiliert und dann eins nachlädt. Habe ich den Schalter "Laufzeit-Packages verwenden" gewählt, so kann eigentlich nichts mehr schief gehen.

Ich suche weiter! (ist ja bald Ostern )

Dank und Gruß oki
42
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:17 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