Rückkopplung aus einer DLL

Von: , Frage gestellt am Fr, 5. Nov 1999

Hallo Leute,

ich möchte von einer DLL aus eine Funktion ausführen, die innerhalb des Hauptprogrammes(exe-Datei) steht. Kann ich das durch einfache Übergabe der Funktionsadresse regeln oder gibts da noch was zu beachten? Mein Problem dabei ist außerdem, daß ich die Adresse nicht als Pointer,
sondern bestenfalls über einen String übergeben könnte.
Bin für jeden Hinweis dankbar.

mfG, Steffen

7 Antworten zu dieser Frage

  1. Antwort von nach 11 Stunden hilfreich
    Re: Rückkopplung aus einer DLL

    Hallo Leute,

    ich möchte von einer DLL aus eine
    Funktion ausführen, die innerhalb des
    Hauptprogrammes(exe-Datei) steht. Kann
    ich das durch einfache Übergabe der
    Funktionsadresse regeln oder gibts da
    noch was zu beachten?
    Wenn es eine "gscheite" Programmiersprache ist (C, C++, Delphi, ... aus einer 5er oder 6er-VB-EXE sollte es auch gehen) dann muesste das schon so gehen. Wichtig ist dann aber die Aufrufkonvention zu beachten (vorallem dann Probleme, wenn die EXE und DLL in verschiedenen Programmiersprachen geschrieben wurden). Mein Problem dabei
    ist außerdem, daß ich die Adresse nicht
    als Pointer,
    sondern bestenfalls über einen String
    übergeben könnte.
    Die Adresse ist ein 32bit Integer, eine Zahl also, die Du ja einfach in einen string umwandeln koennen solltest.

    • Antwort von nach 12 Stunden hilfreich
      Re^2: Rückkopplung aus einer DLL

      Mein Problem dabei
      ist außerdem, daß ich die Adresse nicht
      als Pointer,
      sondern bestenfalls über einen String
      übergeben könnte.
      Die Adresse ist ein 32bit Integer, eine
      Zahl also, die Du ja einfach in einen
      string umwandeln koennen solltest.
      Fragt sich nur, ob andere Apps/Prozesse auf dieses Mem-Segment zugreien dürfen oder ob das in einer Schutzverletzung endet...

      • Antwort von nach einem Tag hilfreich
        Re^3: Rückkopplung aus einer DLL

        Fragt sich nur, ob andere Apps/Prozesse
        auf dieses Mem-Segment zugreien dürfen
        oder ob das in einer Schutzverletzung
        endet...
        Duerfen sie afaik schon, da die EXE und die DLL im selben Speicherbereich ausgefuehrt werden.
        Ausserdem ist das, was der Steffen da will eine ganz "normale" CallBack-Prozedur und das ist ja schon aus der Windows-API bekannt und dort funktionierts auch, odr?

        Aber die beste Methode ist immer ausprobieren, es kann ja nix kaputtgehen (wenn man vorher alles abgespeichert hat).

  2. Antwort von nach 15 Stunden hilfreich
    Re: Rückkopplung aus einer DLL

    Hallo,
    Es ist immer das gleiche Problem: Auf so eine allgemeine Frage kann man keine konkrete Hilfe geben. Im Priniz geht es !!!!!
    Also beantworte mal folgende Fragen, dann bekommst du auch konkrete Hilfe:

    Betriebssystem: ?
    Version: ?
    Programmierprache Hauptprogramm: ?
    Version: ?
    Programmierprache DLL: ?
    Version: ?
    Besonderheiten: ?

    MfG Peter [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

  3. Antwort von nach einem Tag hilfreich
    Re: Rückkopplung aus einer DLL

    Hallo Steffen,

    das was Du möchtest funktioniert und ist unter Windoof auch sehr gebräuchlich, nennt sich Callback-Funktion. Es gibt da aber einige Dinge zu beachten, unter C++ und Delphi muß die Funktion, die aufgerufen werden soll exportiert werden, dabei auf die Aufrufkonventionen achten, am gebräuchlichsten ist STDCALL. In Visual Basic ab Version 5.0 gibst Du die Funktionsadresse mit AdressOf(Funktion) an, den Rest macht dann VB. Es muß immer die Funktionsadresse angegeben werden, mit einem String geht das nicht.

    Michel [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

    • Antwort von nach einem Tag hilfreich
      Re^2: Rückkopplung aus einer DLL

      Es muß immer
      die Funktionsadresse angegeben werden,
      mit einem String geht das nicht.
      Du kannst aber die Adresse, die nix anderes ist, als ein 32bit-Integer in einen String umwandeln, indem Du sie wie eine Zahl behandelst (Type-Cast). Das geht dann mit VB nicht mehr (wuesste jedenfalls nicht, wie Du AddressOf in eine Zahl umwandeln koenntest).

  4. Antwort von nach 4 Tagen hilfreich
    vielen Dank, aber noch eine Frage

    Hallo,

    ich hab das Problem so ähnlich wie hier besprochen übers Wochende selbst gelöst, trotzdem vielen Dank für die Antworten. (Frage bezog sich auf Delphi)

    OK, es scheint erstmal alles zu funktionieren, aber exportiert habe ich die Callback-Funktion nicht. Und das ist das, was mir sorgen macht: kann bei späteren Läufen dadurch irgendwas in die Hose gehen?

    Der Grund meiner Anfrage ist eine kleine Unit, die für mich sämtliche kleine Dialoge herstellt. (ich gehe für solche Sachen nicht über die Entwicklungsumgebung)
    Eine ältere Version davon ist hier als Freeware zu finden:
    http://rcswww.urz.tu-dresden.de/~roos/S_home.htm
    , wenn ich die neue vorstelle dann werd ich mich hier nochmal melden.

    bis bald, Steffen [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!