lua-api相关内容
我想通过调用 lua_setfenv() 在自己的环境中执行不受信任的 .lua 文件 这样它就不会影响我的任何代码. 该函数的文档虽然只解释了如何调用函数,而不是如何执行文件. 当前运行我使用的文件: int error = luaL_loadfile(mState, path.c_str()) ||lua_pcall(mState, 0, 0, 0); 我是否必须使用 lua_
..
我想知道如何在 lua 5.2.3 中创建和使用新的 C 库.由于我在嵌入式系统上,我无法使用动态库(需要,共享库,...).我找到了一个答案,但它是针对 lua 5.0 (http://www.lua.org/pil/26.2.html),所以不兼容.如果有人有想法? 解决方案 Edit linit.c 并将您的库入口点添加到其中.然后将修改后的 linit.c 添加到您的项目中.链接器
..
下面是我需要从 C 读取的 lua 表: listen = {{端口=1234,地址=“192.168.1.1",用户数据=“liunx"},{端口=1235,地址=“192.168.1.2",用户数据=“liunx1"},{端口=1236,地址=“192.168.1.3",用户数据=“liunx2"}} 下面是c代码: #include /* 在调用 Lua 时总是包含这个 */#incl
..
我正在尝试遍历 Lua 中的表并输出: 每个表的键. 每个表中每个条目的键/值对. 代码如下: void print_table(lua_State *L){lua_pushnil(L);而(lua_next(L,-2)!= 0){const char *key = lua_tostring(L, -2);如果(lua_isstring(L,-1))printf("%s = %s"
..
如果我理解正确的话,Lua 默认会在发生错误时调用调试库“debug.traceback". 然而,当像这里的例子那样将 Lua 嵌入到 C 代码中时:简单的 Lua API 示例 我们只有栈顶的错误信息可用. 即 if(状态){/* 如果出现问题,错误信息在顶部 *//* 堆栈 */fprintf(stderr, "无法加载文件: %s\n", lua_tostring(L,
..
我正在做一个小项目,试图将 lua 与 C++ 集成.然而,我的问题如下: 我有多个 lua 脚本,我们称它们为 s1.lua s2.lua 和 s3.lua.其中每一个都有以下函数:setVars() 和 executeResults(). 现在我可以通过 LuaL_dofile 并在使用 setVars() 和/或 executeResults() 之后立即调用 lua 文件.然而
..
我想创建一个表格 myTable = {[0] = { ["a"] = 4, ["b"] = 2 },[1] = { ["a"] = 13, ["b"] = 37 }} 使用 C API? 我目前的做法是 lua_createtable(L, 0, 2);int c = lua_gettop(L);lua_pushstring(L, "a");lua_pushnumber(L, 4);
..
test.exe调用addTest.lua并将 lua_testobj 设置到表中,然后addTest.lua调用testobj.dll,但是testobj.dll无法获取"lua_testobj" 错误消息是 addTest.lua:9尝试索引本地'testobj'(一个用户数据值) test.exe L = luaL_newstate();//链接lua libluaL_
..
我正在为引擎制作游戏脚本,并且正在使用一个元表将函数从表(存储玩家的自定义函数和数据)中的功能重定向到userdata对象(这是我的Player类的主要实现).用户可以使用self来引用两者. 这是我在Player类中的C#中进行绑定的方式: state.NewTable("Player"); // Create Player wrapper table
..
因此,使用Lua C API,您可以将Lua值保存在注册表中,并在以后检索它.有多种方法可以执行此操作,您可以创建一个变量并将其指针用作注册表中的键,因为它始终是唯一的.您可以将指针作为轻量用户数据推送. 您还可以使用LuaL_ref(L, LUA_REGISTRYINDEX)创建参考.一个相对于另一个的优势是什么?何时使用引用以及何时使用指针? 还有引用,也称为引用,如果Lua垃圾回
..
我正在用C编写供Lua使用的userdata类型.它具有一些数组类型的属性以及各种方法.现在,如果u是这种类型,我将使用u:set(k,v) resp. u:get(k)访问数据,例如u:sort()作为方法.为此,我将__index设置为包含这些方法的表.现在,如果要使用u[k] = v或u[k]访问数据,则需要将__newindex和__index设置为set或get.但是随后其他方法不再可用
..
在我的C ++程序中,我需要知道Lua变量是整数还是浮点数. C API提供了lua_isnumber(),但是此功能不能区分int/float/double. 到目前为止,我已经通过使用modf()来解决此问题: if (lua_isnumber(luaCtx, -1)) // int / unsigned int / float: { luaVarName = lua_to
..
下面是我需要从C中读取的lua表: listen = { { port = 1234, address = "192.168.1.1", userdata = "liunx" }, { port = 1235, address = "192.168.1.2", userdata = "liunx1" }, { port = 1236, address = "192.1
..
如何在C语言中获取Lua表的大小? static int lstage_build_polling_table (lua_State * L) { lua_settop(L, 1); luaL_checktype(L, 1, LUA_TTABLE); lua_objlen(L,1); int len = lua_tointeger(L,1); prin
..
我正在尝试遍历Lua中的表并输出: 每个表的键. 每个表中每个条目的键/值对. 这是代码: void print_table(lua_State *L) { lua_pushnil(L); while(lua_next(L, -2) != 0) { const char *key = lua_tostring(L, -2); if
..
如果我理解正确,默认情况下,Lua会在发生错误时调用调试库"debug.traceback". 但是,将Lua嵌入到C代码中时(如此处的示例所示): 简单Lua API示例 我们仅在堆栈顶部显示错误消息. 即 if (status) { /* If something went wrong, error message is at the top of */
..
我想知道如何在lua 5.2.3中创建和使用新的C库。由于我在嵌入式系统上,我无法使用动态库(require,shared library,...)我找到一个答案,但它是为lua 5.0( http://www.lua.org/pil/ 26.2.html ),因此不兼容。 解决方案 编辑 linit.c ,并添加您的库入口点。然后将修改后的 linit.c 添加到您的项目中。链接器将使用
..
使用最近的luaJIT lua_open 返回 null 。这不会发生在普通的lua库中。 lua_State * L = lua_open std :: cout #include
..
我的游戏引擎的界面使用标记语言和Lua构建,类似于HTML和javascript。因此,可视元素将具有用于UI事件的处理程序,诸如鼠标移动或点击,并且每当运行处理程序时,引擎将检查其是否被编译,并且如果不是则将通过 luaL_loadstring 。可以通过元素重复或赋值( this.onclick = that.onclick )共享手柄。 如何我在运行它之前设置了一段lua代码的环境?想
..
我正在开发一个小项目,试图将lua与c ++集成。 然而我的问题如下: 我有多个lua脚本,让他们称为s1.lua s2.lua和s3.lua。每个都有以下函数:setVars()和executeResults()。 现在我可以通过LuaL_dofile调用lua文件,和/或executeResults()。这里的问题是,我加载s2.lua后,我不能再调用s1.lua的函数。这意味着
..