我在谷歌上搜索了高低并找到了示例,但它们似乎都不起作用(Lua5.2)。我在Lua中有一个简单的函数functiononData(data)print(data)end我想从C++调用onData并试过这个://CreatenewLuastateL=luaL_newstate();//LoadallLualibrariesluaL_openlibs(L);//Createco-routineCO=lua_newthread(L);//LoadandcompilescriptAnsiStringscript(Frame->Script_Edit->Text);if(luaL_loadbu
背景我在游戏中与Watusimoto合作Bitfighter.我们使用LuaWrapper的变体将我们的c++对象与游戏中的Lua对象连接起来。我们还使用了一个名为lua-vec的Lua变体。加速vector运算。一段时间以来,我们一直致力于解决一个未能解决的错误。将发生随机崩溃,表明元表已损坏。参见here对于Watusimoto关于此问题的帖子。我不确定这是因为损坏的元表,并且看到了一些我想在这里询问的非常奇怪的行为。问题表现例如,我们创建一个对象并将其添加到如下级别:t=TextItem.new()t:setText("hello")levelgen:addItem(t)但是,游
假设我们有一个传递给函数的表,它现在位于堆栈顶部,如下所示://-1=table是否可以从堆栈中的那个表中获取元表?我可以像这样简单地使用已知名称的标识符来获取它:luaL_getmetatable(L,"Foo");但我想重新使用该函数并从堆栈中的表中获取元表。可能有一种简单的方法可以做到这一点,但我似乎找不到相关的函数。 最佳答案 使用lua_getmetatable而不是luaL_getmetatable。lua_版本等同于Lua中的getmetatable(),即它从堆栈上的值获取元表。luaL_版本用于查找(按名称)先前使
大家好!我有一个C++应用程序将Lua作为脚本嵌入。非程序员编辑Lua脚本,然后C++应用程序调用Lua脚本,Lua脚本也调用C++注册函数。我使用Luaplus来完成上述工作。我的问题是:当脚本编辑器出现错误(例如参数拼写错误)时,C++应用程序会崩溃!我能做些什么来防止这种情况发生?谢谢 最佳答案 查看lua_cpcall和lua_pcall。它们都允许在c中对lua进行protected函数调用。如果它们返回一个非负数,则调用失败并且lua堆栈仅包含错误字符串。在cpcalls的情况下,堆栈未被修改。对于pcall,您需要查看
我想为我的游戏引擎添加对Lua脚本的全面支持。我为自己设定的最大目标之一是保持完全模块化。这意味着,除了Lua绑定(bind)部分之外,我不希望引擎的其余部分使用任何特定于Lua的功能。到目前为止,这已被证明并不困难。纯C++到Lua的功能绑定(bind)部分-例如绑定(bind)Vector、Color和Entity对象,以及Draw库或Physics库等模块很容易与引擎的其余部分隔离。现在,我的问题在于事件。我需要为脚本编写者提供一种响应游戏事件的方法。这涉及从引擎调用Lua函数。示例:在Lua中的C++实体上调用OnCreate、OnUpdate、OnCollide。这些事件发生
我正在尝试找出内存泄漏问题。我的项目是一个基于ATL的对话框项目,它使用DirectShow和标准库。我的程序中总共有45个内存泄漏,每个都是24个字节。我在我的stdafx.h中#define'd_CRTDBG_MAP_ALLOC等,以及DEBUG_NEW以获取每个内存泄漏的文件和行号。但是,没有打印文件行号。内存块都是“普通”block,看起来像这样:{180}normalblockat0x003E6008,24byteslong.Data:_>>W>A0AE3E00B05F3E00A0AE3E0057000000我尝试将以下行添加到_tWinMain()的开头_CrtSetBre
我试图在VisualStudio2010中使用Lua+Luabind制作一些HelloWorld。我从here下载了Luasrc。并将其源文件添加到项目中。然后我下载并添加了luabind的来源.最后添加了main.cpp。所以在那之后尝试编译项目并在大多数luabind文件中出现错误:errorC3861:'lua_strlen':identifiernotfounderrorC2065:'LUA_GLOBALSINDEX':undeclaredidentifier请帮我看看我做错了什么?我必须将哪些文件添加到项目中?也许一些额外的图书馆?组织lua项目的最佳实践是什么?
是否可以使用luabind来绑定(bind)以下函数?voidretByRef(int&a,int&b){a=10;b=10}我正在尝试以下操作,但它只适用于具有一个参数的函数def("retByRef",&retByRef,pure_out_value(_1))有没有办法为每个参数指定一个策略? 最佳答案 好的,我找到了一个可以用来添加策略的+运算符,所以def("retByRef",&retByRef,pure_out_value(_1)+pure_out_value(_2)) 关于
我试图让我的团队远离log4cxx并尝试使用Boost.Logv2。我们目前的log4cxxpattern很简单:log4cxx::helpers::Propertiesprop;prop.setProperty("log4j.rootLogger","DEBUG,A1");prop.setProperty("log4j.appender.A1","org.apache.log4j.ConsoleAppender");prop.setProperty("log4j.appender.A1.layout","org.apache.log4j.PatternLayout");prop.se
我在获取从C++调用的Lua5.2函数时遇到问题。这是Luablock(名为test.lua):functiontestFunction()print"HelloWorld"end这是C++:intiErr=0;//Createaluastatelua_State*lua=luaL_newstate();//Loadiolibraryluaopen_io(lua);//loadthechunkwewanttoexecute(test.lua)iErr=luaL_loadfile(lua,"test.lua");if(iErr==0){printf("successfullyloaded