Announcement

Collapse
No announcement yet.

TXMLDocument in einer DLL funktioniert nicht. Warum?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TXMLDocument in einer DLL funktioniert nicht. Warum?

    Hallo,

    Umg.: Delphi 6 Ent. UP2

    Ich stelle in einer Bibliothek eltiche Funktionen zur Verfügung, unter anderem eine Möglichkeit, eine XML-Datei zu lesen und entsprechend aufzubereiten. Dafür habe ich meinen Code, der in einer normalen EXE seit langer Zeit erfolgreich läuft, in meine DLL übernommen. Aber nun macht sich große Ernüchterung breit, da es einfach nicht klappt.

    Dabei sieht das Codefragment wie folgt aus:<br>
    XMLDocument.Active := False;
    XMLDocument.LoadFromFile(...);
    XMLDocument.Active := True;<br>
    Bei LoadFromFile() macht's boom bzw. gar nichts passiert.<br>

    Im Borland Forum public.delphi.xml wurde vor am 21.6.05 das gleiche Problem gepostet. Der gute Mann hat leider keine Antwort erhalten.<br>

    Ich hoffe auf dieses Forum!

    Danke
    Stephan

  • #2
    Was heißt "boom"? Kommt eine Fehlermeldung und wenn ja welche?
    Ich hab da 'ne Vermutung

    Comment


    • #3
      Hi Bernhard,

      leider kommt keine Fehlermeldung, mit 'boom' meine ich, dass die DLL-Funktion nicht funktioniert.

      Debugge ich die DLL, dann steigt die Anwendung an dem Punkt LoadFromFile() aus. Ohne Fehlermeldung, ohne alles. Es hat fast den Anschein, als wäre die Anweisung XMLDocument.LoadFromFile() ein verkapptes Exit(). So zumindest ist das Verhalten beim Debuggen.

      Die auf der DLL basierende Anwendung läuft zwar weiter, aber die DLL-Funktion selbst wurde nicht erfolgreich ausgeführt.

      Stepha

      Comment


      • #4
        Hast Du auch schon mal in die LoadFromFile-Methode gedebugged (Debug-DCU's verwenden)

        Comment


        • #5
          Nein, habe ich noch nicht gemacht.

          Muss ich hierzu das {DELPHI}\Lib\Debug-Verzeichnis in den Bibliothekspfad mitaufnehmen? Ich habe bis dato die VCL noch nicht gedebugged

          Comment


          • #6
            Nein. Nur den Schalter in den Optionen einstellen. Alles andere macht die IDE selbständig

            Comment


            • #7
              Ok!

              Der Thread-Ersteller im Borland-Forum hat einen Workaround für dieses Problem gefunden: er verwendet die TApplication Instanz der Client-Anwendung, sprich der DLL-nutzenden Anwendung.

              Hierzu exportiert er eine procedure, der die Application-Instanz der EXE übergeben wird. Mit dieser EXE-Application-Instanz wird in der DLL das XMLDocument-Objekt erzeugt. Und damit klappt's dann auch. Bevor die DLL freigegeben wird, wird der alte DLL-Application-Zustand wieder restauriert.

              Ich experimentiere noch etwas damit rum, da ich der Meinung bin, dass es auch ohne der EXE-Application funktionieren müsste. NACHTRAG: Es klappt auch ohne der EXE-Application! Man erzeugt das XMLDocument einfach manuell mittels der DLL-eigenen Application Instanz

              Comment


              • #8
                Einen Objektzeiter von der Exe in die Dll zu übertragen funktioniert nur wenn Exe und Dll von der gleichen Delphi-Version und gleichen Patch-Stand kompiliert wurden

                Comment


                • #9
                  Das Problem dürfte sich erledigt haben.

                  In meiner DLL hatte ich auf einem TDataModule eine TXMLDocument plaziert, naja, eigentlich nichts unübliches. Aber genau da lag anscheinend die Ursache für das Problem. Nachdem ich TXMLDocument manuell erzeuge, funktioniert alles tadellos. Keine EXE-Application-Instanzen o.ä. Alles wird von der DLL selbst gemanagt. So wie's sein soll.

                  Der Threadersteller im Borland Forum hat mich zugegebenermaßen auf die Idee gebracht, nur hat mir halt leider seine Lösung nicht gefallen. Anmerkung: Er wird auch auf 'meine' Lösungsvariante umsteigen.

                  Wieso es aber in der ursprünglichen Form nicht geklappt hat, I don't know.

                  Bisheriges Fazit: TXMLDocument in einer DLL sollte manuell erzeugt werden

                  Comment


                  • #10
                    Hast Du es mal probiert statt auf einem TDataModule auf einem normalen (nicht sichtbaren) TForm zu erzeugen?
                    Würde mich mal interessieren ob es evtl. nur ein Bug im TDataModule ist

                    Comment

                    Working...
                    X