Parameter an Callback Funktion



  • Ich benutze eine Callback Funktion, der ich ein Void* als Zeiger auf eine Parameterliste übergebe. Hier ein dummes Beispiel mit einer Multiplikation, aber eigentlich macht die Callback Funktion natürlich komplexere Dinge.

    void callbackfunc(void* params)
    {
      LHS = (cast)(*params).param1*10+(cast)(*params).param2*123;
    }
    
    void caller(void (*callback) (void*), void* params)
    {
    
      ...
      callback(params);
      ...
    }
    
    void main(void)
    {
      int params[2];
    
      params[0] = 10;
      params[1] = 11;
    
      caller(callbackfunc, params);
    }
    

    Die Callbackfunktion selbt kennt natürlich ihre Parameter. Die Caller Funktion kann verschiedene Callback Funktionen aufrufen. Welche aufgerufen wird, kann vorher programmiert werden. Allerdings weiss die Caller Funktion nicht, welche Parameter übergeben werden müssen. Sie kennt nur den zeiger auf die Parameterliste. Die Main Funktion jedoch kennt wieder diese Parameterliste und weiss auch, welche Callback Funktion aufgerufen werde soll. Die Main Funktion gibt daher auch vorher, wann welche Callback Funktion durch den Caller aufgerufen wird.

    Irgendwie funzt das nicht, die Parameter kommen nicht an. Es werden jedoch alle Funktionen ohne Absturz aufgerufen.
    Ist das ein allgemeines Problem oder liegt es vielleicht daran wie ich es umgesetzt habe?

    Ziemlich kompliziert, oder? 😕

    Gibt es andere Wege Parameter an Callback Funktionen zu übergeben (abgesehen von globalen Variablen!)?



  • Deine oben gezeigte callbackfunction behandelt den übergebenen Parameter aber nicht richtig.

    void callbackfunc(void* params)
    {
      int *paramptr = (int *)(params);
      int param1 = paramptr[0];
      int param2 = paramptr[1];
    }
    

Anmelden zum Antworten