Announcement

Collapse
No announcement yet.

DLL /- Objekt bekannt machen

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

  • DLL /- Objekt bekannt machen

    Hallo zusammen!

    Ich versuche eine DLL zu schreiben. Es geht darum, daß in einer ListeBox die Einträge verschoben werden sollen. Der Code für das Verschieben soll in der DLL stehen. Kann man der DLL die TListBox irgendwie bekanntmachen, oder geht das grundsätzlich gar nicht, was ich da vorhabe. Mit DLLs kenne ich mich noch nicht aus. Wäre nett, wenn ihr mir helfen könntet.

    Gruß
    Irmgard

  • #2
    Habe das jetzt nicht getestet, aber da man ja die Komponenten auch zur Laufzeit erzeugen kann sollte man der DLL die Adresse der Originalen aus dem Programm übergeben können.

    TListBox *my=Adresse_der_Listbo
    Christian

    Comment


    • #3
      Hallo Christian!
      Vielen Dank für die schnelle Antwort. Aber eine -vielleicht dumme- Frage: Was ist denn jetzt die Adresse der ListBox. Ich hab da im Moment keinen Durchblick.

      Gruß
      Irmgar

      Comment


      • #4
        Hallo Irmgart,

        eine Adresse zu übergeben ist ganz easy. Du übergibst der Funktion einfach das Objekt mit einem vorangehenden & Zeichen.

        my_function(&listbox);

        Viel Erfolg

        Philip

        Comment


        • #5
          Hallo Philipp!

          Das hatte ich auch mal so versucht, obwohl ich mir schon gedacht hatte, daß es so leicht halt eben nicht geht und wurde vom Compiler darauf aufmerksam gemacht, daß VCL-Klassen mit new erzeugt werden müssen. Ich will aber keine erzeugen, die ist ja schon erzeugt.
          Oder muß ich das mit einem Handle machen?

          gruß
          Irmgar

          Comment


          • #6
            my_function(&listbox);

            Hier sollte die Adresse der Listbox aus deinem Formular stehen (Name)

            my_function(&Name_der_ListBox)
            Christian

            Comment


            • #7
              Hallo Christian!

              So wie du das jetzt sagst hatte ich das versucht:

              up(&Liste);

              Dann hatte ich vom Compiler besagte Meldung bekommen, daß VCL-Klassen mit new erzeugt werden müssen. Wo könnte der Fehler noch liegen?

              Gruß
              Irmgar

              Comment


              • #8
                http://home.snafu.de/christian.marquardt/quickies.1/1_index.html#split

                Schau doch mal bitte beim o.a. Beispiel und dem Code der Funktion nach.

                Da wird eine TStringList (auch eine VCL-Klasse) erzeugt. Die Adresse wird der Funktion übergeben. Innerhalb der Funktion wird die Adresse einer neuen TStringList zur Bearbeitung übergeben. Diese wird nicht neu angelegt, sondern nur ein Zeiger erzeugt.

                Dacht so müßte dass analog mit den DLL's gehen.

                Ich weiß nicht wie eilig es du hast, ggf. könnte ich das mal selbst ausprobieren
                Christian

                Comment


                • #9
                  Hallo Irmgard,
                  ob es sich lohnt den Code für das Verschieben eines Listentrages in eine DLL zu packen, möchte ich zwar bezweifeln, aber damit ist Dir ja sicherlich nicht gedient.
                  Also der Header einer solchen DLL könnte so aussehen:

                  #ifndef DLL_FunktionH
                  #define DLL_FunktionH

                  #if defined(_BUILD_DLL)
                  # define DLL_EXP __declspec(dllexport)
                  #else
                  # if defined(_BUILD_APP)
                  # define DLL_EXP __declspec(dllimport)
                  # else
                  # define DLL_EXP
                  # endif
                  #endif

                  extern "C" void DLL_EXP MoveIt(TListBox*);

                  #endif

                  Was Du vergessen hast zu erwähnen ist, wo Du denn die Listbox plazieren willst. Anegnommen Du hast diese Listbox auf eine Form, dann wirst Du in dem zugehörigen Header-File einen solchen Eintrag finden müssen
                  :
                  TListBox *ListBox1;
                  Der Methode in Deiner DLL übergibst Du ganz einfach den Namen Deiner Listbox in diesem Fall ListBox1, welcher ja bereits ein Zeiger auf die Listbox darstellt. Solltest Du aber die Listbox aus irgendwelchen Gründen erst zur Laufzeit erzeugen wollen (müssen) dann must Du mit new (besser wäre eine auto_ptr) eine Listbox erzeugen und keinesfalls vergessen, diese mit delete irgendwann wieder zu löschen (Ausnahme ein auto_ptr, der erledigt das für Dich)

                  Gruß
                  Gerhar

                  Comment


                  • #10
                    Hallo Gerhard!

                    Es funktioniert. Vielen Dank!

                    Ich habe eigentlich nur mal eine DLL schreiben wollen um zu wissen, wie sowas geht. Nötig ist das in diesem Fall natürlich nicht.
                    Vielen Dank an alle.

                    Gruß

                    Irmgar

                    Comment

                    Working...
                    X