Callback Funktion aus dll



  • Hallo Leute,

    ich bin auf dem Gebiet Callback Funktionen noch relativ unerfahren und hoffe ihr könnt mir weiterhelfen. Ich hab das Forum schon nach ähnlichen Threads durchsucht aber nix passendes gefunden.

    Folgende Ausgangslage:

    Ich habe eine fremde DLL in meine Applikation(MFC) eingebunden und benötige diese Funktion aus dem Header file die sich in einem Struct befindet:

    struct _FOO_CALLBACK{
    .
    .
    .
    long (*ReadMessage)(char *MessageNumber, char *MessageText);
    
    };
    

    So weit ich das verstanden hab wird die ReadMessage Funktion in unbestimmten Abständen von der DLL aufgerufen und teilt mir die MessageNumber und den MessageText mit, den ich dann gerne mit meiner Applikation ausgeben würde, z.B. in einer ListBox o.ä.(Nr. 1, "Hallo Welt", Nr. 2, "Foo bar", usw)

    Nun liegt es an mit den Code für die Funktion zu schreiben die die ListBox mit den Messages füllt, es ist mir allerdings ein Rätsel wie ich das anstellen soll.

    So irgendwie hab ich mir das in meiner kindlichen Naivität vorgestellt...

    long _FOO_CALLBACK::ReadMessage(char *MessageNumber, char *MessageText){
    .
    .
    .
    m_cListBox.AddString(MessageText);
    return 1;
    }
    

    Wo soll das aber hin und wie genau muss das aussehen?

    Bedanke mich schon im Voraus.

    Gurß
    Shane



  • Hi,

    ReadMessage ist selber keine Funktion, sondern ein Funktionszeiger, d.h.
    du erstellst dir selber eine Funktion mit beliebigem Namen und weist sie dann dem Funktionszeiger zu, d.h.

    long MyReadMessage(char *MessageNumber, char *MessageText)
    {
      m_cListBox.AddString(MessageText);
      return 1;
    }
    
    struct _FOO_CALLBACK callback;
    callback.ReadMessage = MyReadMessage;
    

    Jetzt mußt du der DLL "nur noch" deine Callback-Struktur übergeben (dafür sollte es dann eine andere Funktion geben).



  • Sensationell,

    es hat funktioniert, tausend Dank.
    Jetzt wo du das so erklärt hast ergibt das Ganze nun auch einen Sinn.

    Nochmals danke.
    Gruß
    Shane


Anmelden zum Antworten