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? 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

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.

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…

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]

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]

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).

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).

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]