Ещё семпл:
Include "Lua_Include.bb"
Local L = LuaL_NewState()
LuaL_OpenLibs(L)
Lua_InitInterface(L, "CallFunction")
Local Status = LuaL_LoadFile(L, "Beispiel.lua")
If Status Then RuntimeError("Error while loading script!" + Chr(10) + Lua_ToString(L, 1))
Status = Lua_PCall(L, 0, 0, 0) ;Wichtig: Script vor den Funktionsaufrufen mindestens einmal ausfьhren, damit die Funktionsnamen registriert werden
If Status Then RuntimeError("Error while executing script!" + Chr(10) + Lua_ToString(L, 1))
Lua_GetGlobal(L, "TestFunktion1") ;Funktion auf den Stack bringen
Lua_PushNumber(L, 42) ;Erstes Argument auf den Stack
Lua_PushNumber(L, 25) ;Zweites Argument auf den Stack
Lua_PCall(L, 2, 1, 0) ;Die erste Funktion mit zwei Argumenten aufrufen und nur einen Rьckgabewert akzeptieren
Local ReturnValue = Lua_ToNumber(L, -1) ;Rьckgabewert vom Stack holen
Print("TestFunktion1(42, 25): " + ReturnValue)
Lua_Pop(L, 1) ;Rьckgabewert lцschen und Stack in den Originalzustand zurьckfьhren
Lua_GetGlobal(L, "TestFunktion2")
Lua_PCall(L, 0, LUA_MULRET, 0) ;Zweite Funktion ohne Argumente aufrufen und beliebig viele Rьckgabewerte akzeptieren
;Rьckgabewerte sind in "direct order" auf dem Stack, d.h. letzter Rьckgabewert liegt zuoberst
Local ReturnValue3# = Lua_ToNumber(L, -1)
Local ReturnValue2$ = Lua_ToString(L, -2)
Local ReturnValue1 = Lua_ToNumber(L, -3)
Print("TestFunktion2(): " + ReturnValue1 + ", " + ReturnValue2 + ", " + ReturnValue3)
Lua_Pop(L, 3) ;Rьckgabewerte lцschen und Stack in den Originalzustand zurьckfьhren
Lua_Close(L)
WaitKey()
End
Function Lua_UserFunction()
End Function
Beispiel.lua
function TestFunktion1(A, B)
return A + B
end
function TestFunktion2()
return 1337, "Hello World!", 3.1415926
end
Сори за неметску жзяцлю. И почему они не пишут по английски...
И чего я так пыжусь по поводу этого луа? Он же мне нафиг не нужен. Откуда эта ответственность за эту тему...