草庐IT

lua-cjson

全部标签

c++ - 从 C/C++ 快速检索 lua 对象

所有非本地lua对象都存储在某个表中。从表中检索对象通常意味着首先对键进行哈希计算,然后检索相应的对象。我想避免哈希计算的额外步骤。最简单的事情(曾经是可能的)是:lua_Objecto(...someluacall...);lua_pushobject(o);但是,如前所述,这已经不可能了。那么,我如何快速存储然后将lua对象(特别是一个大表,重新创建它会很慢)推送到lua堆栈上?我知道注册表,但那只是另一个表,如果我从那里存储/检索,则无法避免哈希计算。编辑:一些细节:lua包装库的一个众所周知的问题是临时表问题。假设我打电话:control:camera():get_someth

c++ - 如何在 C++ 和 Lua 之间来回传递大型结构

我正在考虑将Lua嵌入到我正在开发的C++应用程序中。我的意图是使用Lua编写脚本,为某些给定输入执行哪些有序操作,即。在c++程序中接收到一个新的工作项,将详细信息传递给Lua后端,Lua回调到c++中进行必要的工作,返回完成的结果。涉及的主要数据结构是一个大型(大约80多个成员)struct。我是Lua的(非常)新手,不确定如何将它传入和传出我的主机应用程序和嵌入式Lua状态。到目前为止,我认为我的选择是:a)在进出C++和Lua时将所有单独的数据成员压入/弹出堆栈(听起来很乱)。b)构建一个表并用值填充,然后将其放入/取出堆栈(更干净一点)。c)将它作为userdata传递(轻/

c++ - 我如何清理我的 lua 状态堆栈?

我正在使用luaC-API读取存储在lua文件中的配置数据。我在文件中有一个漂亮的小表,我编写了一个查询C函数来解析表中的特定字段。(是的,它有效!)它通过一遍又一遍地调用其中一些函数来工作:...lua_getglobal(...);lua_pushinteger(...);lua_gettable(...);lua_pushstring(...);lua_gettable(...);lua_lua_getfield(...);...你明白了。像这样查询完数据后,是否必须清理堆栈? 最佳答案 只要您的堆栈不会无限制地增长,就可以了

c++ - 注册用于 Lua 5.2 的 C++ 类

所以我正在阅读如何通过THISlittleblogtutorial为Lua创建和注册一个C++类.但尽管它简单、信息丰富且清晰易读,但它似乎适用于旧版本的Lua。所以一些函数/宏要么丢失了,要么只是具有不同的签名。以下代码在LuaC5.2版中会是什么样子?#include#include#include#include#includeusingnamespacestd;//JustauselesstestclassclassMyClass{private:int_X;public:MyClass(intx):_X(x){};~MyClass(){Release()};//Display

c++ - 当我的 lua 代码抛出错误时,为什么我无法捕获 luabind::error 异常?

当您从C++调用LUA函数并且出现运行时错误时,LuaBind会抛出一个luabind::error异常,您可以捕获该异常,然后读取堆栈以查看错误是什么。我的调试器确实捕获了这个异常,但是当我让调试器继续运行时,程序没有在我的代码中捕获到异常,而是立即终止。LuaBind包含来自析构函数~proxy_member_void_caller()的文件中的“call_member.hpp”抛出异常。简单的测试代码就会出现问题。我正在使用带有LuaBind0.9.1的Xcode5。 最佳答案 原来是badpracticetothrowexc

Unity 项目中怎样正确的使用 Lua?

(图源siki学院-狸墨老师)什么是LuaLua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。可以方便的与c/c++进行相互调用。但是Unity中主要是用c#进行开发的,因此在Unity中使用Lua通常有以下两种方案:使用c#实现一个lua虚拟机基于原生的cluaapi做一个封装,让c#调用为什么要使用Lua1.轻量级:Lua用标准C语言编写并以源代码形式开发,编译后仅仅一百余千字节,可以很方便的嵌入到其他程序中。2.可扩展:Lua提供非常丰富易于使用的扩展接口和机制,由宿主语言(通常是C或C++)提供功能

c++ - 循环遍历 C++ 中的所有 Lua 全局变量

这个问题在这里已经有了答案:IteratingthroughaLuatablefromC++?(3个答案)关闭9年前。我已经搜索了很长时间,但我还没有找到从C++中获取所有全局变量的方法。考虑这个小的Lua测试脚本。myGlobal1="Global1"myGlobal2=2functiontest()locall1=0print(myGlobal1,myGlobal2,l1)endtest()假设您在print(myGlobal1,myGlobal2,l1)处暂停执行并从C++获取所有全局变量(myGlobal1和myGlobal2).这些示例是任意的,从C++的角度来看,全局变量是

Spring Boot + Lua = 王炸!

曾经有一位魔术师,他擅长将SpringBoot和Redis这两个强大的工具结合成一种令人惊叹的组合。他的魔法武器是Redis的Lua脚本。今天,我们将揭开这个魔术师的秘密,探讨如何在SpringBoot项目中使用Lua脚本,以解锁新的可能性和提高性能。如果你一直在寻找提升你的应用程序的方法,那么这篇博客将为你揭示其中的神奇之处。推荐一个开源免费的SpringBoot实战项目:https://github.com/javastacks/spring-boot-best-practice第一部分:Lua脚本简介当涉及Lua编程时,以下是对前述12个关键概念的详细说明,附带Lua代码示例以帮助你更深

c++ - lua_pop 与 lua_remove

目前我正在用C++构建自己的脚本VM管理器类。我对Lua&LuaC或C++的任何东西都没有问题,但让我困惑的一个部分是何时使用lua_pop以及何时使用lua_remove。据我了解,lua_pop是自上而下移除多个值(在堆栈上),删除不再需要的数据,而lua_remove是用于从任意有效的堆栈索引中删除单个值(基本上是Lua手册对两者的说明:P)。但我注意到网络上散布的某些代码段混合了lua_pop和lua_remove,但是当我尝试使用lua_pop时而不是lua_remove调用只是删除了顶部堆栈元素,我遇到了问题。那么是否有可能获得关于如何以及何时正确使用这两个功能以及这两个功

c++ - 如何干净利落地结束 Lua 线程?

我的情况是,我正在使用Lua(C)API来执行保存在字符串中的脚本。我希望用户能够终止脚本的执行(如果脚本包含无限循环,这是必不可少的),我该怎么做?lua_State*Lua=lua_open();char*code;//InitialisationcodeluaL_dostring(L,code); 最佳答案 在线上Hook是不够的。此代码是单行,但会永远循环:whiletruedoend您需要设置一个指令计数Hook。如果我没记错的话,应该是lua_sethook(Lua,&LineHookFunc,LUA_MASKCOUNT