1.传递类和类的函数 代码语言:cpp 复制 #include<stdio.h>#include<lua.hpp>classMyClass{private:int_value;public:// 构造函数MyClass(intvalue):_value(value){}// 成员函数voidsetValue(intnewValue){_value=newValue;}intgetValue()const{return_value;}};extern"C"{// 注册 C++ 类的方法LUALIB_AP...
这篇文章,属于Lua和C++交互的子篇章。 Lua调用C++类注册生成的Lua模块 ①新建创建对象函数,调用lua_newuserdata,创建一个对象指针,指向new出来的新的对象。 ②新建成员方法,调用lua_touserdata,得到从lua中传入的对象指针,调用成员方法。 ③调用luaL_newlib,将需要封装的C++函数放入到一个lua表中压入栈里。 ④将自...
打开liblua项目cocos2dx_support目录下的LuaCocos2d.cpp文件,添加自定义类的头文件 在包括头文件的时候,我们可能会遇到 " Error: 无法打开源文件 "的情况,解决办法如下: 右键liblua,选择属性—配置属性—C/C++目录—常规,在附加包含目录里添加我们自定义类文件所在目录,用";"隔开,最后点击确定,错误就消失了 注意:...
1、函数的原型: typedef int(*lua_CFunction)(lua_State *L) 在函数返回之前,Lua会自己主动删除栈中结果之下的内容 2、使用lua_pushcfunction(L,func) lua_setglobal(L,"mysin") 3、參数类型检查:将lua_tonumber(L,1)改成luaL_checknumber(L,1) 注冊函数模块: luaL_register:这个函数接收一些C函数及其名...
既然可以有多个返回值,那么压栈的顺序肯定也得讲究一下,不然就乱套了。Lua中,压栈的顺序和外部接收返回值变量的顺序是一致的:最先入栈的数据会被第一个变量接收,第二个入栈的会被第二个变量接收...,以此类推,这点和Lua给C语言函数传参比较类似。
广义上说类不过就是公共数据+公共方法,对象就是一些私有数据+类中的公有数据和公共方法,其中公共方法还要细分为对象有关的成员方法以及与对象无关的静态成员方法。再翻译一层就是类的公共数据可以用全局变量表示,公共方法也就是全局函数,只是成员函数第一个参数是隐式的this指针,这点搞反汇编比较了解,反汇编层次...
Lua中调用C语言函数实例 Lua中调⽤C语⾔函数实例 在上⼀篇⽂章()中,讲述了如何⽤c语⾔调⽤lua函数,通常,A语⾔能调⽤B语⾔,反过来也是成⽴的。正如Java与c语⾔之间使⽤JNI来互调,Lua与C也可以互调。当lua调⽤c函数时,使⽤了和c调⽤lua中的同⼀种栈,c函数从栈中得到...
--设置泛型类型再使⽤ --xlua.get_generic_method(类, "函数名")local testFun2 = xlua.get_generic_method(CS.Lesson12, "TestFun2")local testFun2_R = testFun2(CS.System.Int32)--调⽤ --成员⽅法第⼀个参数传调⽤函数的对象 --静态⽅法不⽤传 testFun2_R(obj, 1)
通过函数名调用Lua接口: // 返回Stringstring LuaHelper::callLuaFuncStr(conststring funcName,conststring argsFormat,...){lua_getglobal(L,funcName.c_str());va_list args;va_start(args,argsFormat);uint32_tcount=setLuaFuncArgs(argsFormat,args);va_end(args);if(lua_pcall(L,count,1,0)!=0)...
我最近在玩 Lua 和 alien 模块,以便从 Lua 脚本中使用 Win32 API。到目前为止,我只遇到了一个使用 alien 的问题,该问题涉及使用某些结构(比如 CreateFontIndirect)的 API。 例如: HFONTCreateFontIndirectA(constLOGFONT& lplf ); LOGFONT: typedefstructtagLOGFONT{LONG lfHeight; ...