(1)调用Lua函数的API规范:首先,将待调用的函数压找;然后,压入函数的参数;接着用lua_pcall进行实际的调用;最后,从栈中取出结果。 (2)对于普通的错误,lua_pcall会返回错误代码LUA_ERRRUN。但有两种特殊的错误会生成不同的错误码,因为它们不会运行错误处理函数。(a)内存分配失败时返回 LUA_ERRMEM;(b)消息处理...
lua有两个函数可用于捕获异常:pcall 和 xpcall,这两个函数很类似,都会在保护模式下执行函数,效果类似try-catch,可捕获并处理异常。 两个函数的原型如下: pcall (func [, arg1, ···]) xpcall (func, errfunc [, arg1, ···]) 1. 2. 对比两个函数,xpcall多了一个异常处理函数参数 errfunc。对于pcal...
#define LUA_ERRMEM 4//内存分配错误 #define LUA_ERRERR 5//在运行错误处理函数时发生的错误#define LUA_YIELD1//线程被挂起 #define LUA_ERRRUN2//运行时错误 #define LUA_ERRSYNTAX3//编译错误 #define LUA_ERRMEM4//内存分配错误 #define LUA_ERRERR5//在运行错误处理函数时发生的错误 大体上可以分...
int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc); nargs: 待调用函数的参数数量 nresults: 期望的结果个数 errfunc: 处理错误函数的索引 就像settop函数的赋值一样,lua_pcall 会根据要求的数量来调整实际参数,即压入nil或者丢弃多余的结果。压入一个结果前,lua_pcall会向删除栈中的...
LUA_ERRGCMM: 在运行 __gc 元方法时出错了。 (这个错误和代码块加载过程无关,它是由垃圾收集器引发的。) 执行lua代码块 intlua_pcall(lua_State*L,intnargs,intnresults,intmsgh); 作用: nargs 为压入栈的参数个数, 函数被调用完后所有参数都会出栈。而函数返回值此时入栈,返回值个数调整为nresults。如...
lua_pcall函数在调用成功时返回 0 ,否则返回以下(定义在lua.h中的)错误代码中的一个: LUA_ERRRUN:运行时错误。 LUA_ERRMEM:内存分配错误。 对于这种错,Lua 调用不了错误处理函数。 LUA_ERRERR:在运行错误处理函数时发生的错误。 lua_pop void lua_pop (lua_State *L, int n); ...
* 这些信息在"lua_pcall"返回后,由于栈已经展开,所以收集不到了。 * lua_pcall 函数会返回下列常数(定义在"lua.h"内)中的一个: LUA_OK (0): 成功。 LUA_ERRRUN: 运行时错误(一般错误)。 LUA_ERRMEM: 内存分配错误(此种情况,Lua不会调用错误处理函数)。
具有“入口点”的Lua - pcall 、 我正在用以下内容加载Lua脚本: lua_State * L = lua_open(); luaL_openlibs(L); const char lua_script[] = "function sum(a, b) return a+b; end print(\"_lua_\")"; int load_stat = luaL_loadbuffer(L,lua_script,strlen(lua_script),lua_script); lua_...
lua有两个函数可用于捕获异常:pcall 和 xpcall,这两个函数很类似,都会在保护模式下执行函数,效果类似try-catch,可捕获并处理异常。 两个函数的原型如下: pcall (func [, arg1, ···]) xpcall (func, errfunc [, arg1, ···]) 对比两个函数,xpcall多了一个异常处理函数参数 errfunc。对于pcall,异常处...
case LUA_ERRRUN://运行时错误 /*const char *buf = "my222lib.myfun()";类似这行语句可以引起运行时错误,my222lib实际上不存在这样的库,返回的值是nil*/ sprintf_s(sErrorType,sizeof(sErrorType),"%s","a runtime error"); break; case LUA_YIELD://线程被挂起错误 sprintf_s(sErrorType...