Lua--3.編程

1 簡介

1.1 介紹

Lua(魯啊) 是一門強大、快速、輕量的嵌入式腳本語言。可以作爲和C/C++執行腳本交互的語言。並且Lua的整個庫很小,Lua 5.1版本整個靜態鏈接的lua.dll才164KB,所以Lua很輕量,特別適合輕量級腳本嵌入。

1.2 版本

在這裏插入圖片描述

2 Lua機制

2.1 機制思路

2.2 lua接口函數

2.2.1 數據傳遞lua_to*

int lua_toboolean(lua_State *L, int index);
lua_Integer lua_tointeger(lua_State *L, int index);
const char *lua_tolstring(lua_State *L, int index);
lua_Number lua_tonumber(lua_State *L, int index);
void *lua_topointer(lua_State *L, int index);
const char *lua_tostring(lua_State *L, int index);
  • lua_tonumber
    lua_tonumber轉換指定索引的值爲數字(lua_Number默認爲double)。這一lua值必須數字或可轉換爲數字的字符串(參考2.2.1),否則lua_tonumber返回0。
    (int)lua_tonumber
  • lua_tostring將指定索引的值轉換爲字符串(const char*)。lua值必須爲字符串或數字,否則返回NULL。當值爲數字,lua_tostring將會把堆棧的原值轉換爲字符串(當lua_tostring應用到鍵值上時會使lua_next出現難以找出原因的錯誤)。lua_tostring返回一個完全對齊的字符串指針,這一字符串總是’/0’結尾(和C一樣),但可能含有其它的0。如果你不知道一個字符串有多少個0,你可以使用lua_strlen取得真實長度。因爲lua有垃圾收集機制,因此不保證返回的字符串指針在對應的值從堆棧中刪除後仍然有效。如果你以後還要用到當前函數返回的字符串,你應當備份它或者將它放到registry中

lua_State數據結構

lua_State,我們可以認爲是”腳本上下文”,主要是包括當前腳本環境的運行狀態信息,還會有gc相關的信息。

luaL_newstate()

主要用於創建全局狀態機。
lua_State *L = luaL_newstate(); 主要用於創建全局狀態機。

3 混編

3.1 綁定Lua和C/C++的庫

  • CppLua
    貌似13年後沒更新
  • tolua
    最新版對應lua5.2.4的
  • Luabind
    利用boost機制把綁定做到極致, 比較適合主c++, 弱lua的腳本框架.
    作者已經停止更新, 在windows/linux編譯沒問題, 但是在ios的LLVM下, 無法編譯
  • LuaPlus
    接口較爲簡單, 適於初學者上手, 無任何的模板, 性能不高
  • luaBridge
  • tolua++
    tolua++ is an extension of toLua, a tool to integrate C/Cpp code with Lua
    tolua+±-git
    tolua++ for 5.3 in archlinux

4 示例

參考

1、Lua數據結構 — lua_State(六)
2、Lua源碼分析 - 基礎篇 - 全局狀態機的實現(02)
3、深入理解Lua的全局變量_G以及源碼實現
4、《Lua編程入門》
5、超越luabind的luaBridge
6、Win32下 Qt與Lua交互使用(三):在Lua腳本中connect Qt 對象
7、(使用lua++)Lua腳本和C++交互(三)
8、tolua++中暴露對象給lua時,一定要把析構函數暴露給lua
9、tolua++實現lua層調用c++技術分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章