楼主: v_Congge420
895 0

元宇宙链游系统开发搭建技术 [推广有奖]

  • 0关注
  • 0粉丝

高中生

42%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0.0074
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
300 点
帖子
14
精华
0
在线时间
7 小时
注册时间
2023-5-12
最后登录
2023-5-25

楼主
v_Congge420 发表于 2023-5-19 11:19:27 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

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



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:tostring function Private BOOLEAN RETURN

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
扫码
拉您进交流群
GMT+8, 2026-1-28 08:27