Buchempfehlung
MySQL kurz & gut
MySQL kurz & gut
Das preiswerte Taschen- buch stellt MySQL-rele- vante Inhalte systematisch und knapp dar, sodass es sich optimal zum Nach- schlagen beim Pro- grammieren eignet. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Einbindung der Skriptsprache Lua

von RedakteurnemoredSeite 2 von 4

Einbindung von Lua

Skriptsprachen werden dort eingesetzt, wo sich Programmcode unabhängig vom compilierten Hauptprogramm verändern lassen soll. Ein einfacher Fall wäre eine Konfigurationsdatei zum Festlegen bestimmter Parameter. Dies lässt sich zwar auch durch eine einfache Textdatei erreichen, welche durch das Programm ausgelesen und ausgewertet wird. Ein Skript ist jedoch nicht auf festgesetzte Werte angewiesen, sondern kann die Parameter auch aufgrund bestimmter Vorgaben – etwa aus dem eingestellten Schwierigkeitsgrad – berechnen. Dadurch können Modifikationen des Programms zugelassen werden, ohne dass deswegen der Quellcode offengelegt werden müsste.

Der Lua-Interpreter kann über C – und damit auch über FreeBASIC – angesprochen werden. Die benötigten Header-Dateien sind beim FreeBASIC-Compiler bereits enthalten. Das folgende Programm zeigt auf, wie eine Lua-Skriptdatei eingebunden und aufgerufen werden kann. Um eine Rückmeldung zu erhalten, verwendet das Lua-Skript den Befehl print aus der Basisbibliothek, welche zuerst "freigeschalten" werden muss.

#INCLUDE ONCE "Lua/lua.bi"
#INCLUDE ONCE "Lua/lauxlib.bi"
#INCLUDE ONCE "Lua/lualib.bi"

' Lua bereitstellen
DIM Lua AS lua_State PTR                  ' Schnittstelle zu Lua
Lua = luaL_newstate
luaL_openlibs(Lua)                        ' Standardbibliotheken oeffnen (fuer 'print')

IF luaL_dofile(Lua, "simple.lua") THEN    ' Lua-Script aus einer Datei ausfuehren
  PRINT "Skriptfehler: " & *lua_tostring(Lua, -1)
END IF
PRINT "Programm-Ende"
lua_close Lua                             ' Lua-State freigeben
SLEEP

Das zugehörige Lua-Skript simple.lua könnte so aussehen:

-- Kleines Rechenbeispiel
x, y = 3, 5
summe = x+y
print(x.." + "..y.." = "..summe)

Zu den ersten sieben Zeilen gibt es an sich nicht viel zu sagen: dort werden die grundsätzlichen Voraussetzungen für das Lua-Skript geschaffen. Zeile 8 wird nur benötigt, wenn Funktionen aus einer der Standardbibliotheken verwendet werden. Es gibt acht Standardbibliotheken, die über diesen Befehl eingebunden werden:

Mit luaL_dofile in Zeile 10 wird das Skript gestartet. Der Befehl bewirkt in etwa dasselbe wie

luaL_loadfile(Lua, "simple.lua") orelse lua_pcall(Lua, 0, LUA_MULTRET, 0)

Das bedeutet: Das Skript "simple.lua" wird geladen, und wenn dies erfolgreich war, ausgeführt. Die Parameter von lua_pcall bedeuten dabei der Reihe nach: der Lua-State, die Anzahl der übergebenen Parameter (keine), Anzahl der Rückgabewerte (LUA_MULTRET bedeutet, dass alle vom Skript zurückgegebenen Werte verwendet werden) und der Pointer auf die Fehlerfunktion (hier 0, weil keine besondere Fehlerfunktion verwendet werden soll). Dies soll im Augenblick nur als Hintergrundinformation dienen; später müssen wir ein wenig auf dieses Wissen zurückgreifen.

Ist die Ausführung des Skripts erfolgreich, so gibt luaL_dofile den Wert 0 zurück. Ansonsten ist der Rückgabewert eine Fehlernummer (an dieser Stelle unterscheidet sich luaL_dofile von der oben genannten Umschreibung), und das Skript legt außerdem einen ZSTRING PTR zur Fehlermeldung auf den Stapel, wo sie mittels *lua_tostring(Lua, -1) ausgelesen werden kann – auf die Stapelverarbeitung wird auf der nächsten Seite eingegangen.

lua_close schließlich gibt den Speicher wieder frei.

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 10.07.2012 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 04.09.2013 von Redakteurnemored gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen