LUA 5 mit C++
-
Hi,
ich hoffe, dass das Forum hier das richtige ist ...
Also, ich würde gerne LUA-Support in mein Programm integrieren. Allerdings hab ich nur ein Tut für LUA 4 und bei LUA ist ja nur die Dokumentation für lua (Interpreter), luac (Compiler) und die LUA-Syntax selbst dabei, aber nicht, wie man die Lib mit C++ verwendet.
Nachdem ich also endlich gerafft habe, dass ich ein extern "C" um meine Includeblöcke machen muss, damit ich keine Linkerfehler kriege, funktioniert jetzt auch das Initialisieren (lua_open()) und Freigeben (lua_close()).
Nur wüsste ich jetzt gerne, wie ich 1. ein Script aus einem String ausführen kann und 2. ein Script aus einer Datei laden kann, allerdings möchte ich es auch hier aus einem String laden (da ich ein Virtual File System verwende), aber das Script soll vorkompiliert und optimiert gespeichert werden, um es mehrmals zu verwenden. Und dann müsst ich natürlich noch wissen, wie ich dann in LUA 5 diese Scripte auch ausführen kann.
Und von wegen schau in die Header, ich find dort viel zu viele Funktionen, die was bringen könnten:
LuaL_loadfile(), LuaL_loadbuffer(), lua_dofile(), lua_dostring(), lua_dobuffer() usw.ChrisM
-
Ich verwende lua_dobuffer(). Immer, egal ob's 'ne Datei ist, ein String oder Whatever. Dateien lade ich selbst aus einem eigenen Filesystem.
-
Und wenn die Datei mit luac vorkompiliert wurde? Dann kannst du sie ja schlecht in einen String laden (das vielleicht schon, aber LUA erwartet doch ASCII-Daten im String und keine Opcodes, oder?)
Außerdem wird ein Script dann bei jeder Ausführung auf's Neue im Speicher kompiliert, oder?
ChrisM
-
Nein. lua_dobuffer() erwartet darum ja drei Parameter (neben dem obligatorischen luaState). Die Adresse des Buffers, die Grösse und einen Namen zur Anzeige bei Fehlern.
Das heisst es funktioniert sowohl für Strings als auch für Binärcode, was compilierte Teile ja nunmal sind.
Ob's compiliert ist oder nicht erkennt die Funktion automagisch und compiliert logischerweise bereits compilierten Code nicht erneut.
Oder wie es die Dolu ausdrückt:
lua_dofile and lua_dobuffer are both able to execute pre-compiled chunks. They automatically detect whether the chunk is text or binary, and load it accordingly (see program luac). lua_dostring executes only source code, given in textual form.
-
OK, big thx
ChrisM