我正在将Lua作为脚本语言实现到Windows应用程序中。由于应用程序的结构,打印输出未使用流式io,例如stdout和stderror。我已经设法覆盖Luaprint以适应我的结构...lua_register(L,"print",cs_print);...但是如何在不使用流的情况下覆盖所有错误和调试打印输出?我需要在一个函数中处理它(类似于print)。 最佳答案 Lua写入stderr的唯一地方是在luaL_newstate的panic函数中。安装。如果您将Lua嵌入到您的应用程序中,请确保您从protected调用中启动Lu
我正在开发一个基本上只执行lua脚本的C++程序。然而,在该lua脚本中构造了类,这些类已从我的c++程序导出到lua脚本。我的main()c++函数只是在一些准备之后调用...luabind::call_function(m_L,"main");现在我的lua脚本是这样的localfunctiontest()localc=C()endfunctionmain()fori=1,2dolog(i)test()endend我包含了一个std::cout12destructordestructor而不是1destructor2destructor有人知道这是为什么吗?我在这里遗漏了什么吗?
我有一个使用Lua5.2.1的VisualStudio2008C++03应用程序。我想用一个名为“foo”的模块扩展Lua,但是当我在我的Lua脚本中调用require("foo")时,出现错误:foo_test.lua:1:module'foo'notfound:nofieldpackage.preload['process']nofile'!\lua\process.lua'nofile'!\lua\process\init.lua'nofile'!\process.lua'nofile'!\process\我的Lua脚本:foo.bar()我的lua_foo.h文件:#inclu
我想知道如何从LuaCAPI中的函数获取多个返回值。Lua代码:functiontest(a,b)returna,b--IwouldliketogetthesevaluesinC++endC++代码:(调用函数的部分)/*pushfunctionsandarguments*/lua_getglobal(L,"test");/*functiontobecalled*/lua_pushnumber(L,3);/*push1stargument*/lua_pushnumber(L,4);/*push2ndargument*//*callthefunctioninLua(2arguments,
我有很多C++代码,其中包含许多命名空间中的函数和类(例如,boost)。现在我正在尝试将LuaJiT2作为脚本引擎嵌入,但我找不到任何关于调用函数和使用namespace中的其他东西的信息。那么,是否可以使用FFI将函数从c++命名空间传递到LuaJIT? 最佳答案 您可以使用标准的LuaAPI向Lua公开namespace范围的函数以及类静态函数。这与使用常规Lua解释器完全一样,因为LuaJIT与其直接兼容。但是你不能使用FFI,因为FFI是基于对头文件的基于C的解析。而且您使用的是C++语法。FFI不是使用LuaJIT的唯一
当C++类的内存已从Cmalloc中保留时,应该如何使用它?我正在使用C库(lua),我需要向它公开一个C++类,在这种情况下,为了垃圾收集这些保留空间,lua会保留内存。一个更简单的类似场景如下:#includeclassClase{private:std::stringvalor;public:Clase(){}Clase(conststd::string&valor):valor(valor){}conststd::string&get()const{returnthis->valor;}voidset(conststd::string&valor){this->valor=va
我是boost库的新手,这是一个非常棒的库!另外,我是互斥量的新手,如果我犯了新手错误,请原谅我。无论如何,我有两个函数,分别是FunctionOne和FunctionTwo。FunctionOne和FunctionTwo由不同的线程异步调用。下面是发生的情况:在FunctionOne中,我在函数开始时锁定了一个全局互斥锁,并在函数结束时解锁了全局互斥锁。FunctionTwo也是如此。现在问题来了:有时FunctionOne和FunctionTwo被调用的时间相隔不到几毫秒(尽管并非总是如此)。因此,FunctionOne开始执行,而FunctionTwo执行到一半。当Functio
我研究过一些Lua,并且我对C++比较熟悉,但我仍然看不出有任何真正的理由我想将Lua(或任何与此相关的脚本语言)与C++结合使用。如果我已经在用C++(一种快速语言)制作游戏,为什么我不直接用C++做所有事情呢?毕竟,我已经熟悉C++了。我为什么要花时间学习一门新语言以及如何将它集成到我的C++代码中?我敢肯定,只是让界面设置和工作会有问题。学习需要一些时间,它如何真正得到返回?它真的只对大型开发团队有益吗? 最佳答案 我附和已经说过的话,并且我想在此刻将Lua集成到我的游戏引擎中时添加我自己的想法!这取决于您制作的游戏类型,但无
我正在使用luabind作为我的lua到C++包装器。luabind提供了一个方法来使用我自己的回调函数来处理lua抛出的异常,set_pcall_callback()。所以我从文档中解释了一个例子,变化是logger->log()函数并将该函数放在一个名为“Engine”的类中,所以它不是一个常规的全局函数,它现在是一个成员函数,它是我的问题似乎在哪里。这里是相关的代码片段:classEngine//Wholeclassnotshownforbrevity{public:Engine();~Engine();voidRun();intpcall_log(lua_State*);pri
假设我在C++应用程序中嵌入了Lua。这个问题听起来可能很奇怪,但我很感兴趣,是否有一种标准方法可以从C++端禁用Lua功能?例如,我想禁用新变量的创建,除了一些已定义的变量,如下所示:localtime=10localsize=20functiontest()returntime*sizeend如果我定义了time、size和test函数以外的任何东西,我想让LuaVM失败。这可能不破解VM本身吗?或者例如我想禁用循环(for和while语句)。 最佳答案 限制可以创建或访问的global变量的名称很容易:只需将您的脚本加载到具有