Announcement

Collapse
No announcement yet.

MDI-Child aus DLL

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

  • MDI-Child aus DLL

    Hallo zusammen,
    habe ein kleines Problem.
    Ich habe ein MDI-Form und in diesem möchte ich einige Child-Fenster aus verschiedenen DLLs öffnen nur leider bekomme ich beim Öffnen immer eine Zugriffsverletztung
    Hier der Code im MDI-Form

    var
    dllHandle: THandle;
    OpenMDIChild: procedure (PApp: TApplication; PForm: TForm); stdcall;
    begin
    DllHandle := LoadLibrary('ProjectDll');
    @OpenMDIChild := GetProcAddress(dllHandle, 'ShowMDI001');
    if @OpenMDIChild <> nil then
    begin
    OpenMDIChild(Application, Self);
    end;
    end;

    und und der DLL verwende ich

    procedure ShowMDI001(PApp: TApplication; PForm: TForm); export; stdcall;
    var
    Form: TForm001;
    dllApp: TApplication;
    begin
    dllApp := Application;
    Application := PApp; // das Application-Objekt auf die Host-Anwendung einstellen
    Form := TForm001.Create(PForm); // MDI-Child erzeugen
    Form.ParentForm := PForm;
    Form.ParentApplication := PApp;
    Form.Show;
    Application := dllApp; // das Application-Objekt zurücksetzen, damit die DLL vernünftig beendet werden kann
    end;

    hat jemand eine Idee warum das ganze nicht klappt.
    Zur Laufzeit erzeugte MDI-Childs werden doch auch geöffnet.

    Gruss

    Stefan

  • #2
    Du wirst Dein Programm mit Laufzeitpackages kompilieren müssen, damit auch TObject in der DLL = TObject in der Exe ist.
    Sonst sind das 2 verschiedene Klassen und es kracht an tausend stellen

    Comment


    • #3
      Hallo Herr Geyer,
      könnte es vielleicht daran liegen das die DLL in Delphi 5 erstellt wurde und die eigentliche EXE mit Delphi 7.
      Wenn ich nämlich eine keine Test EXE mit D5 erstelle klappt o.g. Routine einwandfrei.

      Gruss

      Stefa

      Comment


      • #4
        Mischen von Klassen aus verschiedenen Delphi-Versionen geht nun überhaupt nicht. Eine Klasse (in der DLL) mit Delphi 5 hat nun mal ein anderes Speicher-Layout als eine Klasse aus D7 (in der Exe). Da kann es nur krachen.

        Wenn Du verschiedene Compiler-Versionen mischen willst mußt du entweder ein (COM-)Interface verwenden oder dich auf C-Kompatible Schnittstellentypen beschränken

        Comment


        • #5
          Das bezieht sich dann aber nur auf die MDI-Anwendung, oder ?
          Normale mit D5 erstellen Dlls kann ich doch mit D7 sonst auch verwenden.
          Problem ist ja das ich in D5 eine Komponente habe die in D7 nicht zur verfügung steht. Wollte diese aber in ein D7 Projekt nun einbinden.

          Gruss

          Stefa

          Comment


          • #6
            > Normale mit D5 erstellen Dlls kann ich doch mit D7 sonst auch verwenden.

            Ja. Wenn Du nur eine C-Like DLL-Schnittstelle hast und keine Objekte zwischen Exe und DLL austauschst.

            > Problem ist ja das ich in D5 eine Komponente habe die in D7 nicht zur verfügung steht.

            Um was handelt es sich denn

            Comment


            • #7
              Ist eine Komponente mit der man alle Bilder eines verzeichnisses als Thumbnails auflisten kann, sehr konfortabel das ganze.

              Gruss

              Stefa

              Comment


              • #8
                Hast Du Sourcen davon?
                Wenn ja sollte es wohl kein Problem darstellen diese Auch unter D7 zum laufen zu bekommen

                Comment


                • #9
                  ne leider nicht nur dcu Dateie

                  Comment


                  • #10
                    Und die Komponente gibt es nicht mehr (mit Sourcen) zu kaufen?
                    Würden auch <a href="http://www.jam-software.com/delphi/">Alternativen</a> gehen

                    Comment


                    • #11
                      Hallo Herr Geyer,
                      die Kompo ist nicht schlecht, aber leider fehlen sehr viele Eigenschaften die die alte Kompo für D5 enthielt.
                      Würde daher lieber diese ins Programm integrieren.
                      Ein Aufruf als eigenständige Form dürfte ja kein Problem sein, ist zwar net schön, aber was solls...

                      Gruss

                      Stefa

                      Comment

                      Working...
                      X