LUA und MFC: lua_register
-
Hallo!
folgender Code:
void CPHLView::OnExec() { lua_State* luaVM = lua_open(); lua_baselibopen(luaVM); lua_iolibopen(luaVM); lua_strlibopen(luaVM); lua_mathlibopen(luaVM); lua_register(luaVM, "Relais_On", l_Ron); lua_dofile(luaVM, "test.txt"); lua_close(luaVM); }die Funktion: l_Ron
int CPHLView::l_Ron(lua_State *luaVM) { CRelaisCtrl *rl = new CRelaisCtrl; int card; double r = lua_tonumber(luaVM, 1); if(r < 9) card = 1; else if(r > 9) card = 2; rl->on((int)r ,card); lua_pushnumber(luaVM, 0); delete rl; return 1; }beide Funktionen gehören zu der Klasse CPLHView. Das ist die Ansichtsklasse meiner SDI MFC Anwendung.
Beim Compilieren erhalten ich folgenden Fehler:PHLView.cpp(558) : error C2664: 'lua_pushcclosure' : Konvertierung des Parameters 2 von 'int (struct lua_State *)' in 'int (__cdecl *)(struct lua_State *)' nicht moeglich
Keine Funktion mit diesem Namen im Gueltigkeitsbereich stimmt mit dem Zieltyp uebereinKann mir jemand erklären wo der Fehler ist? Ich habe schon viel rumprobiert, aber ich bekomme es einfach nicht hin.
-
Hallo,
du solltest schon die richtige Stelle des Quell-Textes hier angeben, dann sind die Chancen größer, daß geholfen werden kann, denn im gezeigten Code gibt es keinen Bezeichner, der 'lua_pushcclosure' heißt.

MfG
-
die funktion kommt aus der LUA-API
hier ist der code#define lua_register(L,n,f) \ (lua_pushstring(L, n), \ lua_pushcfunction(L, f), \ lua_settable(L, LUA_GLOBALSINDEX)) #define lua_pushcfunction(L,f) lua_pushcclosure(L, f, 0) [...] LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);
-
du mußt die Methode l_Ron static machen oder es darf keine Member-Funktion einer Klasse sein (d.h., es muß eine globale Funktion sein)
MfG
-
OK
dann muss ich mir da wohl was überlegen. Eine der Funktionen muss nähmlich auf Membervariablen zugreifen....aber trozdem danke

Lecter