我有一个C++程序,它将创建一个lua_State并调用自定义lua代码。在调用自定义lua函数之前,使用luaopen_ffi()调用lua_State:
luaopen_ffi(lua_state_);但是,当我的程序执行自定义lua代码时,它无法找到ffi。我进一步打印了ffi的值,遗憾的是它是nil:
print(ffi) --- which outputs nil例如,使用luaopen加载的其他库具有一个非零值。
print(io) --- outputs table: 0x400af268我进一步检查了费伊的源代码,它说它不创建基于它的注释的全局ffi命名空间:
LUALIB_API int luaopen_ffi(lua_State *L) {
CTState *cts = lj_ctype_init(L);
settabV(L, L->top++, (cts->miscmap = lj_tab_new(L, 0, 1)));
cts->finalizer = ffi_finalizer(L);
LJ_LIB_REG(L, NULL, ffi_meta);
/* NOBARRIER: basemt is a GC root. */
setgcref(basemt_it(G(L), LJ_TCDATA), obj2gco(tabV(L->top-1)));
LJ_LIB_REG(L, NULL, ffi_clib);
LJ_LIB_REG(L, NULL, ffi_callback);
/* NOBARRIER: the key is new and lj_tab_newkey() handles the barrier. */
settabV(L, lj_tab_setstr(L, cts->miscmap, &cts->g->strempty), tabV(L->top-1));
L->top--;
lj_clib_default(L, tabV(L->top-1)); /* Create ffi.C default namespace. */
lua_pushliteral(L, LJ_OS_NAME);
lua_pushliteral(L, LJ_ARCH_NAME);
LJ_LIB_REG(L, NULL, ffi); /* Note: no global "ffi" created! */
ffi_register_module(L);
return 1;
}我也尝试过ffi = require("ffi"),但它不起作用:
因此,在调用luaopen_ffi之后,我可以知道如何使用ffi功能吗?还是luaopen_ffi不是正确的方式?
发布于 2016-04-14 02:24:54
如果您想要一个名为ffi的全局文件,请尝试如下:
luaopen_ffi(lua_state_);
lua_setglobal(lua_state_ ,"ffi");luaopen_ffi似乎将表留在堆栈中,就像Lua模块中通常的那样。
https://stackoverflow.com/questions/36612349
复制相似问题