在程序loadfile之后会马上有一句: lua_resume(L,0); 在我开始学习它的时候,我想当然的认为要执行一个脚本文件中的函数,必须resume才会使脚本有效,否则任何语句都是不会让它执行的(描述好象有点问题),在后来的认识中,其实不是这样。 当luaL_loadfile(实际上最终是调用lua_load函数)之后lua_resume并不是必需的,...
var L = LuaDLL.luaL_newstate(); var path = Application.dataPath + "/Examples/02_LoadFile/02.lua"; var errorPath = Application.dataPath + "/02.lua"; //返回结果不是0代表加载失败 var result = LuaDLL.luaL_loadfile(L, path); //Debug.Log(result); if ( result!= 0) { Debug.LogErr...
int luaL_loadfile (lua_State *L, const char *filename); 加载某个文件 luaL_dofile 其定义为(luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0)) 两者之间的差别就是dofile比loadfile过了一个lua_pacll
luaL_loadfile(IntPtr luaState, string filepath) 第一个参数传入luaState,关于luaState,第一篇文章讲了。第二个参数传入文件路径。返回值是数字,如果返回0代表成功,0以外的代表失败。 如果路径是正确的,没有什么好说的。如果是失败,lua是不会自己报错的。 出错时,lua会把错误信息压入栈中,所以需要调用LuaDLL...
首先利用lua提供的函数luaL_dofile来执行一个lua脚本。 可以看到有两个过程,首先luaL_loadfile函数将lua文件加载进来然后进行词法语法语义分析,得到一个closure函数放入栈中,接着调用lua_pcall函数来执行栈顶的closure。 我们先来看看第一个过程: 首先在luaL_loadfile中真正加载lua文件的是lua_load函数 ...
luaL_loadfile,词法和语法分析。lua_pcall用于将分析的结果(也就是字节码)放到虚拟机中执行。 luaL_loadfile词法和语法分析 会调用于f_parser函数,词法分析之后产生的字节码等相关数据都在这个Proto类型的结构体中,数据又作为Closure保存了下来,如下 staticvoidf_parser(lua_State *L, void *ud) { ...
loadfile(“hello”)后,文件并不执行,我们把文件赋给一个变量hello, 当hello()时,才真的执行。当然,更为标准的玩法如下所示。 假设我们有一个文件叫mymod.lua,内容如下: 文件名:mymod.lua 于是我们可以这样使用: 其实,require干的事就如下:(所以你知道为什么我们的模块文件要写成那样了) ...
在Lua内部,所有模块的注册都在linit.c的函数lual_openlibs中提供。 可以看到,它依次访问lualibs数组中的成员,这些成员定义了每个模块的模块名及相应的模块注册函数,依次调用每个模块的注册函数完成模块的注册 : staticconstluaL_Reglualibs[]={{"",luaopen_base},{LUA_LOADLIBNAME,luaopen_package},{LUA_TABLIBNAM...
对于一个开发人员的我,这两天在网站做一个导出Excel表格功能,遇到了一个坑。在本地测试导出并且可以...
加载(luaL_loadfile)到内存后的内存布局: 在Lua中脚本加载通过luaL_loadfile生成一个函数闭包压入栈顶,然后luaY_parser词法、语法分析之后生成对应的数据存入到Proto中,字节码对应可详见函数部分Lua字节码文件结构及加载过程。如图主要为数据栈,函数调用栈以及全局状态中的数据及重要的栈指针。其中stack_last(最大stack...