thema dll



  • sagt mal, ist es eigentlich möglich, funktionen des hauptprogrammes von einer dll aus aufzurufen (z.b. mittels function pointers ?), wenn mir die headerdatei, worin diese funktion deklariert wurde bekannt ist ?

    folgendes beispiel:

    hauptprogramm class add {} in .cpp und .h datei.

    die dll soll die funktion im hauptprogramm aufrufen, kennt bei der kompilation aber nur die .h datei (virtual ?).

    könnte man beim aufruf der dll einen funktions pointer an die dll übergeben, und darüber die funktion aufrufen ?

    oder wie löst man das ? ich kenne leider nur den weg vom hauptprogramm zur dll...



  • Ja, das ist in der Win32 API Gang und Gebe. Man definiert z. Bsp. eine eigene Fensterprozedur, die bei Nachrichten an das Fenster aufgerufen wird. Die dll muss also noch nichtmal irgendwelche Header-Dateien des Hauptprogramms kennen.



  • ok, danke, ich werde es heute abend mal probieren. 🙂

    ich hatte bei meinem letzten programm das problem, dass der speicher, der in einer dll mit new reserviert wurde auch innerhalb der dll wieder freigegeben werden musste. daher wollte ich im hauptprogramm eine funktion einbauen, die für die pointer in der dll den speicher reserviert, um den speicher auch vom hauptprogramm aus wieder freigeben zu können... (zumindest ist das ein grund für meine frage gewesen).



  • dass der speicher, der in einer dll mit new reserviert wurde auch innerhalb der dll wieder freigegeben werden musste.

    Iss eh ganz schlechtes Kino ...
    Mit paar sehr schmutzigen tricks geht es, aber man sollt es nie wirklich machen.
    Merke: der der den speicher reserviert, ist auch fuer das aufrauemen zustaendig ... und das sollte sich auch in den funktionsdeklarationen wiederspiegeln.

    und nur prominente Ausnahmen bestaetigen diese Regel:
    Smartpointer, Qt faellt mir auf anhieb ein ...^^

    Ciao ...



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • der mist ist aber, wenn man zB in der DLL einen std::vector füllen möchte. dann ruft man in der dll push_back auf und schon knallts am ende. Deswegen verwende ich für dlls jetzt nur noch C-Arrays, die schon vor-allokiert sind



  • @RML
    Aber AFAIK ist es bei Windows nicht möglich, wie unter Unix-Systemen, dass du in der DLL auch die Symbole (Funktionen, Klassen, Variablen etc.) des Programmes benutzen kannst. Du musst glaube ich über Funktionspointer arbeiten.



  • naja, ich werde es so einrichten, dass ich der dll mit dem funktionsaufruf einen funktionspointer (der basisklasse) mitgebe. wenn ich neuen speicher brauche, rufe ich inerhalb der dll die funktion im hauptprogramm über den pointer auf, der mir den speicher mit new reserviert - freigeben will ich ihn ja eh vom hauptprogramm aus. ich bin zwar noch am testen, aber es scheint zu klappen (so bleibt zumindest die reservierung und freigabe im hauptprogramm).


Anmelden zum Antworten