Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
25.01.2002, 11:04
apfelkorn



hartgesottene linux-programmierer (prefi) werden mich wohl jetzt umbringen wollen, aber mir ist das im Moment wurscht. Es ist mir schon klar, wie man Funktionen in einer DLL aufruft, aber meine Frage ist folgende:
Wie kann ich in einer DLL Funktionen des Hauptprogramms aufrufen oder aus anderen DLL's im Hauptprogramm gelinkte Funktionen?

--

zum Seitenanfang zum Seitenende Profil || Suche
001
25.01.2002, 11:59
CY4N1D3



die frage ist jetzt nicht genau.

meinst du das du ein programm hast welches eine DLL benutzt, aus welcher du eine funktion importieren willst um das hauptprogramm zu steuern ?

hauptprogramm -> dll <- dein programm
???

du kannst die gleiche dll benutzen, nur hast du dann keine möglichkeit die speicherbereiche des hauptprogramms zu nutzen (ausser über windowsmessages oder über etwas was mir gerade nicht einfällt :>)

--

ob nun delphi, c oder java. kein programm lässt sich mit allen 3en gleichschnell entwickeln.

zum Seitenanfang zum Seitenende Profil || Suche
002
25.01.2002, 14:35
Hessie J.



Im allgemeinen, wie schon richtig im Titel angedeutet, durch Callback-Funktionen. Man übergibt der DLL also die Adresse einer im Hauptprogramm aufzurufenden Funktion. Die DLL muss diese Funktionalität natürlich entsprechend vorsehen.

--

zum Seitenanfang zum Seitenende Profil || Suche
003
25.01.2002, 15:34
Prefect



Ja, das ist die normale Methode, übrigens rein auf C bezogen. Zwar funktioniert das mit C++-Funktionen genauso, aber sobald du Klassen hin- und herimportieren willst kriegst du Probleme.

Es gibt aber noch eine andere Methode, zumindest unter ELF-Unixen:
Eine mit -rdynamic gelinkte .so, die per dlopen() und RTLD_GLOBAL geladen wird kann direkt Funktionen des Hauptprogramms aufrufen, ohne Funktionspointer zu verwenden.
Das ist aber natürlich nur sehr beschränkt anwendbar...

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
004
25.01.2002, 16:47
apfelkorn



naja, das hilft ja schonmal weiter... ist allerdings trotzdem noch eine Frage: wie kann ich dann die Pointer *** elegant *** dahin übermitteln und dann einsetzen... also rein theoretisch isses dann ja wie mit dem importieren von funktionen... ich importiere ins hauptprogramm eine dll-funktion (sagen wir: export_funcs(array_mit_pointern) ) dann habe ich schonmal die pointer in der dll-funktion. Kann ich dann jetzt wie beim import im hauptprogramm einfach "(*sowiesofunktion()) = GetProcAddress(array_mit_pointern[1])" machen?

nebenbei: was für einen datentyp kann ich für einen pointer angeben?

[edit]
Das ist ja auch blödsinn... geht es nicht, dass ich per ___declspec(DLLEXPORT) meine funktionen im hauptprogramm definiere und dann nur die hInstance mitschicke und dann eben per GetProcAdress();?
[/edit]

--


Dieser Beitrag wurde am 25.01.2002 um 18:04 von apfelkorn bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche