META FORCE系统属于我们的社区,并且是完全的去中心化,这意味着它是透明的,安全的,并且能够抵抗外部影响。
三个步骤:
加载lua代码到vm中,对应api-luaL_loadbuffer
luaL_loadbuffer会同时在栈上压入代码块的指针
执行lua代码,对应api-lua_pcall
lua_pcall会从栈上依次弹出{nargs}个数据作为函数参数,再弹出函数进行执行,并将结果压入栈
如果lua代码有返回值,那么通过lua_toXXX相关api从栈上获取结果
完整的代码如下:
private bool DoLuaCode(System.IntPtr L,string luaCode){
//加载lua代码
if(Lua.luaL_loadbuffer(L,luaCode,"")==0){
//执行栈顶的函数
if(Lua.lua_pcall(L,0,1,0)==0){
//函数执行完成后,返回值会依次依次押入栈
return true;
}else{关于区块链技术开发唯:Congge420
Debug.LogError("pcall failed!");
return false;
}
}else{
Debug.LogError("load buffer failed");
return false;
}
}
假如我们有一段lua代码:
return'hello,i am from lua'
这段lua仅仅返回一段字符串,那么利用DoLuaCode去执行就是:
//lua代码
string luaCode="return'hello,i am from lua'";
if(DoLuaCode(L,luaCode)){
Debug.Log(Lua.lua_tostring(L,-1));
//lua_toXXX不会出栈,需要lua_pop才能出栈
Lua.lua_pop(L,1);
}
由于此处lua代码返回的是字符串,因此使用lua_tostring(L,-1)来将栈顶的元素转为字符串并返回,相应的我们还能看到有lua_tonumber,lua_toboolean等等.
4.c#调用lua全局函数
接下来的例子将说明一下c#端如何执行lua中的全局函数。
假设现在我们有一段lua代码如下:
function addSub(a,b)
return a+b,a-b;
end
通过DoLuaCode来运行以上的lua代码,就得到了一个全局的addSub函数,这个函数会返回a,b相加和相减的结果。
为了在c#端执行以上的lua函数,需要按以下步骤进行:
将全局函数压入栈中,对应api-lua_getglobal
将函数所需的参数依次压入栈中,对应api-lua_pushnumber
执行栈中函数,对应api-lua_pcall


雷达卡



京公网安备 11010802022788号







