[Lua] Problem
-
Hi!
Folgendes Problem:
Ich habe eine Klasse erstellt und dort eine Funktion geschrieben, die ich gerne von Lua aus aufrufen möchte. Doch leider gelingt mir das nur bei globalen Funktionen ohne Fehlermeldung.UMLuaManager.h:
public: lua_State* mLuaInstance;UMLuaManager::UMLuaManager(void) { mLuaInstance = NULL; mLuaInstance = lua_open(); luaopen_base (mLuaInstance); lua_pushcfunction(mLuaInstance, UMLuaManager::Testlua); // HIER lua_setglobal(mLuaInstance, "LuaTest"); }; int UMLuaManager::Testlua(lua_State* L) { std::cout << "Testfunktion in UMLuaManager" << std::endl; return 0; };Der Compiler spuckt in Zeile 7 mit lua_pushcfunction folgenden Fehler aus:
"UMLuaManager::Testlua": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&UMLuaManager::Testlua", um einen Zeiger auf den Member zu erstellen.Ich habe heute schon den ganzen Tag versucht, ihm diesen Fehler auszutreiben, bin aber zu keinem Ergebnis gekommen. Den Tipp, den mir der Compiler gibt, konnte ich auch nicht wirklich gebrauchen. Entweder habe ich das falsch verwendet, oder es ist einfach prinzipiell falsch.
Als ich das ganze noch mit globalen Funktionen getestet hatte, konnte ich einfach
lua_pushcfunction(mLuaInstance, Testlua);schreiben, ohne das ein Fehler kam. Ich benutze Lua 5.0.
Schonmal Danke im Voraus

-
Versuch mal
static int UMLuaManager::Testlua(lua_State* L) { std::cout << "Testfunktion in UMLuaManager" << std::endl; return 0; };
-
Funktioniert, Danke

Nur der harken an der Sache ist, dass mir mein Compiler vorgibt, dass ich eine static int - funktion direkt in der Klasse (im Header) definieren muss. Kann man das irgendwie umgehen?
-
Header-File:
static int UMLuaManager::Testlua(lua_State* L);Source-File:
int UMLuaManager::Testlua(lua_State* L) { std::cout << "Testfunktion in UMLuaManager" << std::endl; return 0; }
-
Wenn ich das genau so mache, meckert der Compiler ja gerade rum, dass ist ja leider das Problem

Edit: Verlesen.^^, nochmals Vielen Dank

-
Ich habe mich erneut an einem Lua-Problem festgebissen.
Ich wollte eine Funktion aus Lua aufrufen, doch es scheitert vermutlich daran, dass ich Datein von meinem Programm zwar ausführen kann, aber er die Funktionen und alles andere sozusagen dabei nicht ...parst... bzw. abspeichert und lua dann durch diesen Befehl
lua_getglobal(L, "f");nicht richtig auf die Funktion zugreifen kann.
Ich habe mir dazu folgendes auf diesem link angeguckt:
http://www.lua.org/pil/25.2.html
Mit meinen eher mageren Englischkenntnissen entnehme ich aus diesem SatzA great strength of Lua is that a configuration file can define functions to be called by the application.
, dass ich vllt. sowas wie eine Configurations-Datei brauche, die dann vllt meine Funktionen parst, bzw. abspeichert.
-
Mit dieser "Configuration-File" ist einfach ein Lua-Sourcefile gemeint.
-
Damit kann ich leider nicht viel anfangen

-
Also so schwer ist das nun nicht, oder?
Lua ist eine Scriptsprache. Richtig? Richtig! Und du kannst Lua in deine Programme einbinden. Richtig? Richtig! Und du kannst anstatt Configfiles jetzt in deinem Programm halt Scriptfiles benutzen. Richtig?
-
Ich hab mir das ganze eigentlich anders gedacht. Ich dachte, man könne irgendwie von der Application Lua-Funktionen aufrufen, wenn man die Luascripte irgendwie parsen könnte. Naja, ich kann auch ohne parsen leben.
Seit 4 Tagen treibt mich etwas anderes auf die Palme. Ich habe keine Probleme damit in meiner Application Funktionen mit Lua-Parametern auszuwerten. Allerdings nur, wenn es sich um numbers, bools oder strings handelt. Mit den Tabellen (Arrays, Structuren) werde ich einfach nicht fertig. Ich habe schon verdammt lange versucht irgendwie mit lua_touserdata irgendwie den Parameter mit der Tabelle abzufangen und auszuwerten, aber das ist gescheitert und mittlerweile glaub ich auch nicht mehr, dass die Funktion dafür da ist.
Kurz gesagt: Ich bin total am verzweifeln, wie ich z.b. ein Array (oder eine Struktur) in Form einer Tabelle von Lua in meiner Application abfange und in Arrays oder ähnliches konvertiere