toLua初始化碰到的问题

本文详细介绍了使用Lua语言时必须具备的六个关键配置项:LuaState管理、LuaLoader初始化、核心C库注册、栈高度设置、C#类绑定及协程注册。这些配置对于Lua与C/C#代码交互至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lua可以加载时必备的内容:

第一个:LuaState:必须,最好是做成单例管理,因为在使用protobuf的时候,如果不是同一个luastate加载的lua,有可能出现如下问题:

lua代码中require时找不到对应的C库。例如:require "pb" 找不到。因为tolua框架里有个pb.c,在做protobuf编码和解码的时候会调用到,如果不是同一个luastate创建的调用,则出现调不到require "pb"

第二个:LuaLoader loader = new LuaLoader();必须要,没有为什么。

第三个:OpenLibs()

  这个东西非常重要,它标志着你一些C写的PB的内容能不能使用,比如你想去做一个LUAtable去对应protobuf协议,那么你在里面编码解码时,tolua的框架会去调用require "pb",如果你没有写这个库的注册,那么你将不能使用pb的库。

  这个库里的注册内容包括如下:

  lua.OpenLibs(LuaDLL.luaopen_pb);
  lua.OpenLibs(LuaDLL.luaopen_sproto_core);
  lua.OpenLibs(LuaDLL.luaopen_protobuf_c);
  lua.OpenLibs(LuaDLL.luaopen_lpeg);
  lua.OpenLibs(LuaDLL.luaopen_bit);
  lua.OpenLibs(LuaDLL.luaopen_socket_core);

第四个:lua.luasettop

  网络上的解释是如下,具体也不用关注,不明白LUA底层的话也很难明白这个:

  设置栈的高度,如果之前的栈顶比新设置的更高,那么高出来的元素会被丢弃,反之压入nil来补足大小。
另外,Lua提供了一个宏,用来从栈中弹出n个元素:#define lua_pop(L, n) lua_settop(L, -(n)-1)

第五个:luabinder.bind(lua)

  将当前luastate的虚拟机中绑定C#中的一些类、全局类、委托等等。

第六个:Register

  注册协程,你懂的,协程太重要了

转载于:https://www.cnblogs.com/vsirWaiter/p/7500068.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值