我試圖從C中調用用戶定義的Lua函數。我已經看到了一些關於此的討論,並且解決方案似乎很清晰。我需要用luaL_ref()來獲取函數的索引,並保存返回的索引以備後用。從C調用Lua
在我的情況下,我用luaL_ref保存了值,而且我的C代碼需要調用luaL_ref保存的Lua函數。爲此,我使用lua_rawgeti,如下所示:
lua_rawgeti(l, LUA_REGISTRYINDEX, fIndex);
這會導致lua_rawgeti崩潰。
我使用的fIndex是我從luaL_ref收到的值,所以我不確定這裏發生了什麼。
編輯:
我運行一個Lua腳本如下:
function errorFunc()
print("Error")
end
function savedFunc()
print("Saved")
end
mylib.save(savedFunc, errorFunc)
我定義我自己的Lua庫 'MYLIB',與C函數:
static int save(lua_State *L)
{
int cIdx = myCIndex = luaL_ref(L, LUA_REGISTRYINDEX);
int eIdx = luaL_ref(L, LUA_REGISTRYINDEX);
我將cIdx和eIdx保存到一個稍後的時間點,當我收到一些外部事件時,我希望在我的Lua腳本中調用其中一個設置爲參數的函數。在這裏,(在相同的線程上,使用相同的lua_State *),我打電話:
lua_rawgeti(L, LUA_REGISTRYINDEX, myCIndex);
這是導致崩潰。
爲了回答這個問題,我們需要看看你在哪裏得到你想要調用的「用戶定義的Lua函數」,以及如何將它存儲在註冊表中。 – 2011-12-19 06:41:37
可能重複[如何從ac函數回調lua函數](http://stackoverflow.com/questions/2688040/how-to-callback-a-lua-function-from-ac-function) – finnw 2011-12-19 20:29:30
看來,問題在於我稱lua_rawgeti的點在我稱爲lua_close(L)之後運行。 – jimt 2011-12-20 06:51:16