首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用luaopen_ffi后找不到ffi命名空间

调用luaopen_ffi后找不到ffi命名空间
EN

Stack Overflow用户
提问于 2016-04-14 01:35:46
回答 1查看 381关注 0票数 1

我有一个C++程序,它将创建一个lua_State并调用自定义lua代码。在调用自定义lua函数之前,使用luaopen_ffi()调用lua_State:

代码语言:javascript
复制
luaopen_ffi(lua_state_);

但是,当我的程序执行自定义lua代码时,它无法找到ffi。我进一步打印了ffi的值,遗憾的是它是nil

代码语言:javascript
复制
print(ffi)  --- which outputs nil

例如,使用luaopen加载的其他库具有一个非零值。

代码语言:javascript
复制
print(io)  --- outputs table: 0x400af268

我进一步检查了费伊的源代码,它说它不创建基于它的注释的全局ffi命名空间:

代码语言:javascript
复制
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不是正确的方式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-14 02:24:54

如果您想要一个名为ffi的全局文件,请尝试如下:

代码语言:javascript
复制
luaopen_ffi(lua_state_);
lua_setglobal(lua_state_ ,"ffi");

luaopen_ffi似乎将表留在堆栈中,就像Lua模块中通常的那样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36612349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档