2
我有C代碼看起來像下面這樣:如何用Lua中的函數指針和SWIG綁定調用函數?
typedef int (*SIMPLEFUNC)(int);
SIMPLEFUNC foo = NULL;
void setup_foo(void) {
foo = ...;
}
我痛飲了裸機.i文件把這個包,然後可以在Lua使用它。我可以給Lua打電話setup_foo()
。我可以看到變量foo
。但是我無法從Lua中調用foo
作爲函數。它顯示爲userdata。
local mylib = require('mylib')
mylib.setup_foo()
print(mylib.foo)
print(mylib.foo(3))
我得到這樣的輸出:
setup_foo() has been called
userdata: 0x1b441c8
PANIC: [string "bootstrap0"]:86: attempt to call a userdata value (field 'foo')
stack traceback:
[string "bootstrap0"]:86: in main chunk
問題
有沒有一種方法使用痛飲時要調用的函數指針如foo
從我的Lua代碼?
有一些SWIG配置可能有幫助嗎?
如果不是,那麼修改我的C代碼以使其工作的最佳方法是什麼?
編輯
在一個較高的水平,我通過切換到塞勒涅,而不是痛飲解決了這個問題。 Selene允許在運行時輕鬆地在Lua狀態下重新綁定函數。 https://github.com/jeremyong/Selene