讓我們創建一個簡單的C模塊的Lua 5.3與全球int
:Lua中共享使用C
static int l_test(lua_State *L){
int Global = lua_tointeger(L, lua_upvalueindex(1));
Global++;
lua_pushinteger(L, Global);
lua_pushvalue(L, -1);
lua_replace(L, lua_upvalueindex(1));
//lua_pushnumber(L, Global);
return 1;
}
static int l_anotherTest(lua_State *L){
int Global = lua_tointeger(L, lua_upvalueindex(1));
Global++;
Global++;
lua_pushinteger(L, Global);
lua_pushvalue(L, -1);
lua_replace(L, lua_upvalueindex(1));
//lua_pushnumber(L, Global);
return 1;
}
static const struct luaL_Reg testLib [] = {
{"test", l_test},
{"anotherTest", l_anotherTest},
{NULL, NULL}
};
int luaopen_testLib(lua_State *L){
luaL_newlibtable(L, testLib);
lua_pushinteger(L, 1);
luaL_setfuncs(L, testLib, 1) ;
return 1;
}
這幾乎是工作,但是當我調用這兩個函數從Lua是這樣的:
local testLib = require "testLib"
print(testLib.test())
print(testLib.anotherTest())
第二次打印應該是4
,但它會打印出3
。 我還在做什麼錯?
要調用剛剛'setfuncs'之前初始化的upvalue,你應該推動其初始值壓入堆棧。要從'l_test'訪問upvalue,你應該使用'lua_upvalueindex(1)'來獲得這個值所在的棧pseudoindex。 –
感謝您的提示。我已經更新了這個問題。這裏仍然缺少一些東西。你可以幫我嗎? – user1511417
如果您想要一個空指針常量,則使用'NULL'宏。使用整數'0'是一個令人迷惑的遺產。 – Olaf