透過例子學習Lua(5)--Lua與C的互動(轉)
透過例子學習Lua(5)--Lua與C的互動(轉)[@more@] 1.簡介 Lua與C/C++結合是很緊密的, Lua與C++互動是建立在Lua與C的基礎上的, 所 以偶先從Lua與C講起. 正如第一講所說, 執行Lua程式或者說呼叫Lua主要有兩種方式: * 透過命令列執行"Lua"命令 * 透過Lua的C庫 雖然此前偶們一直用第一種方式, 但偶要告訴你, 透過Lua的C庫執行才是遊戲中 常用的方式. 2.Lua的C庫 Lua的C庫可以做為Shared Library呼叫, 但一般開發遊戲時會把Lua的所有源程式 都包含在內, 並不把Lua編譯成共享庫的形式. 因為Lua程式只有100多K, 而且幾乎 可以在任何編譯器下Clean Compile. 帶Lua源程式的另一個好處時, 可以隨時對Lua 本身進行擴充, 增加偶們所需的功能. Lua的C庫提供一系列API: * 管理全域性變數 * 管理tables * 呼叫函式 * 定義新函式, 這也可以完全由C實現 * 垃圾收集器Garbage collector, 雖然Lua可以自動進行, 但往往不是立即執行的, 所以對實時性要求比較高的程式, 會自己呼叫垃圾收集器 * 載入並執行Lua程式, 這也可以由Lua自身實現 * 任何Lua可以實現的功能, 都可以透過Lua的C API實現, 這對於最佳化程式的執行速度 有幫助. 經常呼叫的共用的Lua程式片斷可以轉成C程式, 以提高效率. 連Lua都是C寫的 還有什麼C不能實現呢? 3.Lua與C整合的例子 例e10.c /* A simple Lua interpreter. */ #include #include int main(int argc, char *argv[]) { char line[BUFSIZ]; lua_State *L = lua_open(0); while (fgets(line, sizeof(line), stdin) != 0) lua_dostring(L, line); lua_close(L); return 0; } 編譯 Linux/Cygwin * 先編譯Lua, 並把標頭檔案放入include路徑 * gcc e10.c -llua -llualib -o e10 VC6/VC2003 * 先編譯Lua, 在Option中設定標頭檔案和庫檔案路徑 * 新建工程,在工程配置中加入附加庫lua.lib和lualib.lib * 編譯成exe 執行結果 本程式的功能是實現一個Lua直譯器, 輸入的每行字元都會被解釋成Lua並執行. 程式說明 * #include 包含lua標頭檔案, 然後才可以使用API * lua_State *L = lua_open(0) 開啟一個Lua執行器 * fgets(line, sizeof(line), stdin) 從標準輸入裡讀入一行 * lua_dostring(L, line) 執行此行 * lua_close(L) 關閉Lua執行器 例e11.c /* Another simple Lua interpreter. */ #include #include #include int main(int argc, char *argv[]) { char line[BUFSIZ]; lua_State *L = lua_open(0); lua_baselibopen(L); lua_iolibopen(L); lua_strlibopen(L); lua_mathlibopen(L); while (fgets(line, sizeof(line), stdin) != 0) lua_dostring(L, line); lua_close(L); return 0; } 執行結果 本程式的功能是實現一個Lua直譯器, 輸入的每行字元都會被解釋成Lua並執行. 與上例不同的是, 本例呼叫了Lua的一些標準庫. 程式說明 * #include 包含Lua的標準庫 * 以下這幾行是用來讀入Lua的一些庫, 這樣偶們的Lua程式就可以有更多的功能. lua_baselibopen(L); lua_iolibopen(L); lua_strlibopen(L); lua_mathlibopen(L); 4.試試看 把上面兩個小例子在你熟悉的編譯器中編譯執行, 並試試能否與Lua原始碼樹一起編譯
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-951602/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 透過例子學習Lua(6)--C/C++中用Lua函式(轉)C++函式
- 透過例子學習Lua(2)---Lua流程控制(轉)
- 透過例子學習Lua(3)----Lua資料結構(轉)資料結構
- 透過例子學習Lua(7)--呼叫C/C++函式(轉)C++函式
- 透過例子學習Lua(4)--函式的呼叫(轉)函式
- Lua 與 ObjC 的互動OBJ
- LUA與C++互動第一篇C++
- C#與Lua語言學習對比一C#
- 學習Lua的意義
- lua 學習總結
- Lua學習筆記筆記
- Lua遊戲開發(三)---Lua語言學習(上)遊戲開發
- Lua C++互動 應用例項步驟(UserData使用)C++
- Lua 學習筆記(上)筆記
- 從sysbench中學習Lua
- Lua學習筆記(一)筆記
- lua學習: lua及函數語言程式設計語言函數程式設計
- Solana 開發學習之透過RPC與Solana互動RPC
- Lua學習(二)物件導向物件
- redis學習(八) Lua語法Redis
- Lua5.3學習筆記筆記
- lua——alien庫實現lua呼叫C動態連結庫(dll、so)
- lua呼叫c程式C程式
- 《Lua-in-ConTeXt》09:學一點 LuaContext
- 匯出 C/C++ API 給 Lua 使用[轉]C++API
- Redis與Lua及Redis-py應用LuaRedis
- Android 與 LuaAndroid
- xlua中lua物件到c#物件的轉型物件C#
- 熱更新語言--lua學習筆記筆記
- 0基礎lua學習(十四)封裝封裝
- Lua學習筆記--物件導向(三)筆記物件
- nginx-通過lua動態更改upstreamNginx
- xLua中C#呼叫LuaC#
- xLua中Lua呼叫C#C#
- C++呼叫Lua API介面C++API
- C中呼叫Lua函式函式
- Lua的function、closure和upvalue(轉)Function
- redis原始碼學習之lua執行原理Redis原始碼