Slua1.6.2:https://github.com/pangweiwei/slua/releases/tag/1.6.2
window10_64bit
Slua1.6.2解压之后的文件夹内容如图:
Assets文件夹存放我们build之后的Slua文件,这个文件夹下的内容要拷贝到Unity的Assets中供Unity编译调用,其中内容如图
Slua的编译主要在文件夹build中进行,build文件夹内容如图
#define COMPILE_3RD //定义COMPILE_3RD,用来在slua.c中判定是否编译第三方源文件
#ifdef COMPILE_3RD
#ifndef SLUA_3RD_LOADED
#define SLUA_3RD_LOADED
#include "luatest.c" //要测试的第三方源文件
#define EXTEND_LUA_LIB_MAP(XX) XX(luatest,luaopen_luatest) //这里执行XX
static int luaopen_all3rd(lua_State *L)
{
int top=lua_gettop(L); //获得栈顶值
#define XX(libname,opnefunc) (opnefunc(L),lua_setglobal(L,#libname))
//这里XX的作用就是执行第三方库的开始方法
//(执行luaopen_XXX函数)并将libname暴露给lua使用,lua_setglobal查看luaCAPI
EXTEND_LUA_LIB_MAP(XX);
#undef XX
lua_settop(L,top); //设置栈顶值
return 0;
}
#endif //SLUA_3RD_LOADED
#endif //COMPILE_3RD
#include <stdio.h>
#include <string.h>
#if ((LUA_VERSION_NUM < 502) && (!defined(luaL_newlib)))//以防小于502版本的lua没有定义luaL_newlib
# define luaL_newlib(L,l) (lua_newtable(L), luaL_register(L,NULL,l))
#endif
static int Test1(lua_State *L) //自定义方法Test1供lua调用,作用:链接两个字符串
{
char *oneParam=luaL_checkstring(L,1); //检测并得到Slua中调用Test1的第一个参数
char *twoParam=luaL_checkstring(L,2);//检测并得到Slua中调用Test1的第二个参数
lua_pushfstring(L,"%s+%s",oneParam,twoParam);//返回值压入栈
return 1;//返回值个数
}
static int Test2(lua_State *L)//自定义方法,作用:计算两数之和
{
double param1=luaL_checknumber(L,1);//检测并得到Slua中调用Test2的第一个参数
double param2=luaL_checknumber(L,2);//检测并得到Slua中调用Test2的第一个参数
lua_pushnumber(L,param1+param2);//返回值压入栈
return 1;//返回值个数
}
static const struct luaL_Reg mylibs[]=//要注册方法数组
{
{"Test1",Test1},
{"Test2",Test2},
{NULL,NULL},
};
int luaopen_luatest(lua_State *L) //入口方法,编译时由这里进入
{
luaL_newlib(L,mylibs);//注册
return 1;
}
在slua.c中添加头文件:#include “3rd/all3rd.h”
然后再找到 luaS_openextlibs方法,在这个方法中添加all3rd.h文件中的luaopen_all3rd方法,参数指针传入,添加如图标记的部分
至此,我们库文件的添加已经完成了
这个复制过程可以写成批处理,这也是编辑make_win_x64.bat的原因,打开make_win_x64.bat添加如下内容,作用:在“luajit-2.1.0-beta3/src”文件夹下创建3rd文件夹,并将“build/3rd/”文件夹下的内容全部拷贝到“luajit-2.1.0-beta3/src/3rd/”文件夹下
md %LUAJIT_PATH%\src\3rd
xcopy 3rd %LUAJIT_PATH%\src\3rd /s /h /d /y
做完以上步骤,双击执行make_win_x64.bat批处理,将Assets文件夹下的内容拷贝到Unity中
Slua的lua文件中引入luatest
测试luatest中的自定义方法Test1,Test2
结果如图