lua-api相关内容

如何从 C API 在自己的环境中执行不受信任的 Lua 文件

我想通过调用 lua_setfenv() 在自己的环境中执行不受信任的 .lua 文件 这样它就不会影响我的任何代码. 该函数的文档虽然只解释了如何调用函数,而不是如何执行文件. 当前运行我使用的文件: int error = luaL_loadfile(mState, path.c_str()) ||lua_pcall(mState, 0, 0, 0); 我是否必须使用 lua_ ..
发布时间:2021-12-30 20:54:19 C/C++开发

在 lua 中创建新的 C 库

我想知道如何在 lua 5.2.3 中创建和使用新的 C 库.由于我在嵌入式系统上,我无法使用动态库(需要,共享库,...).我找到了一个答案,但它是针对 lua 5.0 (http://www.lua.org/pil/26.2.html),所以不兼容.如果有人有想法? 解决方案 Edit linit.c 并将您的库入口点添加到其中.然后将修改后的 linit.c 添加到您的项目中.链接器 ..
发布时间:2021-12-30 20:39:27 其他开发

lua 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 ..
发布时间:2021-12-30 20:29:30 服务器开发

使用 Lua C API 迭代表

我正在尝试遍历 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" ..
发布时间:2021-12-30 20:24:49 其他开发

从带有嵌入式 lua 的 C 代码打印堆栈跟踪

如果我理解正确的话,Lua 默认会在发生错误时调用调试库“debug.traceback". 然而,当像这里的例子那样将 Lua 嵌入到 C 代码中时:简单的 Lua API 示例 我们只有栈顶的错误信息可用. 即 if(状态){/* 如果出现问题,错误信息在顶部 *//* 堆栈 */fprintf(stderr, "无法加载文件: %s\n", lua_tostring(L, ..
发布时间:2021-12-30 20:20:47 其他开发

使用句柄从 .lua 调用 lua 函数?

我正在做一个小项目,试图将 lua 与 C++ 集成.然而,我的问题如下: 我有多个 lua 脚本,我们称它们为 s1.lua s2.lua 和 s3.lua.其中每一个都有以下函数:setVars() 和 executeResults(). 现在我可以通过 LuaL_dofile 并在使用 setVars() 和/或 executeResults() 之后立即调用 lua 文件.然而 ..
发布时间:2021-12-30 20:19:14 C/C++开发

Lua-为什么C函数作为用户数据返回?

我正在为引擎制作游戏脚本,并且正在使用一个元表将函数从表(存储玩家的自定义函数和数据)中的功能重定向到userdata对象(这是我的Player类的主要实现).用户可以使用self来引用两者. 这是我在Player类中的C#中进行绑定的方式: state.NewTable("Player"); // Create Player wrapper table ..
发布时间:2020-05-04 07:09:46 其他开发

带有轻量用户数据的Lua注册表和引用之间有什么区别?

因此,使用Lua C API,您可以将Lua值保存在注册表中,并在以后检索它.有多种方法可以执行此操作,您可以创建一个变量并将其指针用作注册表中的键,因为它始终是唯一的.您可以将指针作为轻量用户数据推送. 您还可以使用LuaL_ref(L, LUA_REGISTRYINDEX)创建参考.一个相对于另一个的优势是什么?何时使用引用以及何时使用指针? 还有引用,也称为引用,如果Lua垃圾回 ..
发布时间:2020-05-04 07:03:33 C/C++开发

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.但是随后其他方法不再可用 ..
发布时间:2020-05-04 06:56:30 其他开发

测试Lua号是整数还是浮点数

在我的C ++程序中,我需要知道Lua变量是整数还是浮点数. C API提供了lua_isnumber(),但是此功能不能区分int/float/double. 到目前为止,我已经通过使用modf()来解决此问题: if (lua_isnumber(luaCtx, -1)) // int / unsigned int / float: { luaVarName = lua_to ..
发布时间:2020-05-04 06:51:44 C/C++开发

lua c读取嵌套表

下面是我需要从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 ..
发布时间:2020-05-04 06:49:03 服务器开发

使用Lua C API遍历表格

我正在尝试遍历Lua中的表并输出: 每个表的键. 每个表中每个条目的键/值对. 这是代码: void print_table(lua_State *L) { lua_pushnil(L); while(lua_next(L, -2) != 0) { const char *key = lua_tostring(L, -2); if ..
发布时间:2020-05-04 06:33:07 其他开发

使用嵌入式lua从C代码打印stacktrace

如果我理解正确,默认情况下,Lua会在发生错误时调用调试库"debug.traceback". 但是,将Lua嵌入到C代码中时(如此处的示例所示): 简单Lua API示例 我们仅在堆栈顶部显示错误消息. 即 if (status) { /* If something went wrong, error message is at the top of */ ..
发布时间:2020-05-04 06:32:00 其他开发

在lua中创建新的C库

我想知道如何在lua 5.2.3中创建和使用新的C库。由于我在嵌入式系统上,我无法使用动态库(require,shared library,...)我找到一个答案,但它是为lua 5.0( http://www.lua.org/pil/ 26.2.html ),因此不兼容。 解决方案 编辑 linit.c ,并添加您的库入口点。然后将修改后的 linit.c 添加到您的项目中。链接器将使用 ..
发布时间:2017-08-15 20:03:02 HTML/CSS

如何在运行lua代码之前通过lua C API设置一个lua代码块的环境表?

我的游戏引擎的界面使用标记语言和Lua构建,类似于HTML和javascript。因此,可视元素将具有用于UI事件的处理程序,诸如鼠标移动或点击,并且每当运行处理程序时,引擎将检查其是否被编译,并且如果不是则将通过 luaL_loadstring 。可以通过元素重复或赋值( this.onclick = that.onclick )共享手柄。 如何我在运行它之前设置了一段lua代码的环境?想 ..
发布时间:2016-10-24 17:13:13 C/C++开发

从.lua的使用句柄调用lua函数?

我正在开发一个小项目,试图将lua与c ++集成。 然而我的问题如下: 我有多个lua脚本,让他们称为s1.lua s2.lua和s3.lua。每个都有以下函数:setVars()和executeResults()。 现在我可以通过LuaL_dofile调用lua文件,和/或executeResults()。这里的问题是,我加载s2.lua后,我不能再调用s1.lua的函数。这意味着 ..
发布时间:2016-10-17 09:23:25 C/C++开发