Frage zu Lua



  • Hey,

    ich experimentiere momentan mit Lua und das klappt soweit auch ganz gut.
    Ich bin jedoch auf ein Problem gestoßen und zwar benötigt eine in Lua aufgerufene Funktion eine Instanz auf ein Objekt. Wie kann man das lösen?

    function bla()
      cpp_func();
    end
    

    Die Funktion cpp_func wird dann in C++ aufgerufen, alles kein Problem. Jetzt soll aber dort auf die Membervariable der C++ Klasse zugegriffen werden. Aber ich kann ja keine übergeben...

    static int cpp_func(Lua_state *L)
    {
     // Zugriff auf C++ Instanz?
     return 0;
    }
    

    Hat da jemand Erfahrung?



  • Dieser Thread wurde von Moderator/in pumuckl 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.



  • Es gibt sowas wie userdata und lightuserdata. In diesen kannst du dann das Objekt bzw. einen Zeiger auf dieses verpacken. Und in Lua bzw. C++ herumreichen. In Game Programming Gems 6 sind einige Beispiele.



  • Also wenn du wirklich was in die Richtung machen möchtest, dann kann ich dir nur http://www.rasterbar.com/products/luabind.html empfehlen. Ist stark angelehnt an Boost.Python und macht das embedding von Lua wirklich erheblich leichter, sobald man sich an die Benutzung gewöhnt hat.

    Gruß Gate



  • Hey,

    danke für eure Antworten. Ich hab nen bisschen experimentiert und so scheint es zu klappen:

    // Direkt nach der Initialisierung
    lua_pushlightuserdata(myLua, this);
    lua_setfield(myLua, LUA_REGISTRYINDEX , "this");
    
    // In der static Funktion
    lua_getfield(L, LUA_REGISTRYINDEX, "this");
    void *data = (void *) lua_touserdata (L, -1);
    
    if (data)
    {
     // Do something
    }
    

    Kann man wohl so machen, oder? 🙂 Dafür brauche ich mir glaube kein luabind anschleppen 😃


Log in to reply