toLua初始化碰到的問題


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

  注冊協程,你懂的,協程太重要了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM