Momentan beschäftige ich mich mit Lua. Das Problem kann aber auch ohne weiteres auch ohne Lua-Kenntnisse gelöst werden.
Für Lua habe ich eine Klasse erstellt, zum Öffnen, Interpretieren und Schließen von Dateien. Außerdem ist noch eine eigene Funktion hineingesetzt, die dann schließlich im Lua-Skript aufgerufen werden soll.
Das schaut dann so aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#ifndef LUA_H
#define LUA_H
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
#include <string>
#include "Etwas.h"
class Lua
{
public:
Lua();
~Lua();
void vInterpret(std::string strFilename);
private:
lua_State* pLua;
Etwas* pEtwas;
static int iFunktion(lua_State* L);
};
#endif
|
In vInterpret(...) registriere ich dann die Funktion iFunktion(...):
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
|
void Lua::vInterpret(std::string strFilename)
{
lua_register(this->pLua, "Funktion", iFunktion);
int iFileState = luaL_dofile(this->pLua, strFilename.c_str());
...
}
|
Die eigentliche Funktion sieht so aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
int Lua::iFunktion(lua_State *L)
{
...
return 0;
}
|
In iFunktion (welches ja static ist) will ich jetzt auf pEtwas aus Lua zugreifen, welches wiederum nicht static ist. Das sollte es auch nicht, da es sonst zu Überschneidungen kommt, wenn mehrere Skripte laufen.
Soweit ich weiß, kann ich die Klassenmember auch nicht an die static-Funktion direkt übergeben, da Lua-Funktionen nur einen Parameter im Funktionskopf haben dürfen (unzwar lua_State* L; wenn das falsch ist, bitte sofort bescheid sagen und vor allem, wie ich den Parameter bestimme).
Gibt es dann überhaupt eine Möglichkeit an die Membervariable zu kommen?