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++技術分析