日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
通過(guò)例子學(xué)習(xí)Lua(5)—Lua與C交互入門(mén)

1.簡(jiǎn)介

Lua與C/C++結(jié)合是很緊密的, Lua與C++交互是建立在Lua與C的基礎(chǔ)上的, 所以偶先從Lua與C講起.

正如***講所說(shuō), 運(yùn)行Lua程序或者說(shuō)調(diào)用Lua主要有兩種方式:

* 通過(guò)命令行執(zhí)行"Lua"命令

* 通過(guò)Lua的C庫(kù)

雖然此前偶們一直用***種方式, 但偶要告訴你, 通過(guò)Lua的C庫(kù)執(zhí)行才是游戲中常用的方式.

2.Lua的C庫(kù)

Lua的C庫(kù)可以做為Shared Library調(diào)用, 但一般開(kāi)發(fā)游戲時(shí)會(huì)把Lua的所有源程序都包含在內(nèi), 并不把Lua編譯成共享庫(kù)的形式. 因?yàn)長(zhǎng)ua程序只有100多K, 而且?guī)缀蹩梢栽谌魏尉幾g器下Clean Compile. 帶Lua源程序的另一個(gè)好處時(shí), 可以隨時(shí)對(duì)Lua本身進(jìn)行擴(kuò)充, 增加偶們所需的功能.

Lua的C庫(kù)提供一系列API:

* 管理全局變量

* 管理tables

* 調(diào)用函數(shù)

* 定義新函數(shù), 這也可以完全由C實(shí)現(xiàn)

* 垃圾收集器Garbage collector, 雖然Lua可以自動(dòng)進(jìn)行, 但往往不是立即執(zhí)行的,所以對(duì)實(shí)時(shí)性要求比較高的程序, 會(huì)自己調(diào)用垃圾收集器

* 載入并執(zhí)行Lua程序, 這也可以由Lua自身實(shí)現(xiàn)

* 任何Lua可以實(shí)現(xiàn)的功能, 都可以通過(guò)Lua的C API實(shí)現(xiàn), 這對(duì)于優(yōu)化程序的運(yùn)行速度有幫助. 經(jīng)常調(diào)用的共用的Lua程序片斷可以轉(zhuǎn)成C程序, 以提高效率. 連Lua都是C寫(xiě)的還有什么C不能實(shí)現(xiàn)呢?

3.Lua與C集成的例子

例e10.c

 
 
 
  1. /* A simple Lua interpreter. */ 
  2. #include 
  3. #include 
  4. int main(int argc, char *argv[]) { 
  5. char line[BUFSIZ]; 
  6. lua_State *L = lua_open(0); 
  7. while (fgets(line, sizeof(line), stdin) != 0) 
  8. lua_dostring(L, line); 
  9. lua_close(L); 
  10. return 0; 

編譯

Linux/Cygwin

* 先編譯Lua, 并把頭文件放入include路徑

* gcc e10.c -llua -llualib -o e10

VC6/VC2003

* 先編譯Lua, 在Option中設(shè)置頭文件和庫(kù)文件路徑

* 新建工程,在工程配置中加入附加庫(kù)lua.lib和lualib.lib

* 編譯成exe

運(yùn)行結(jié)果

本程序的功能是實(shí)現(xiàn)一個(gè)Lua解釋器, 輸入的每行字符都會(huì)被解釋成Lua并執(zhí)行.

程序說(shuō)明

* #include 包含lua頭文件, 然后才可以使用API

* lua_State *L = lua_open(0) 打開(kāi)一個(gè)Lua執(zhí)行器

* fgets(line, sizeof(line), stdin) 從標(biāo)準(zhǔn)輸入里讀入一行

* lua_dostring(L, line) 執(zhí)行此行

* lua_close(L) 關(guān)閉Lua執(zhí)行器

例e11.c

 
 
 
  1. /* Another simple Lua interpreter. */ 
  2. #include 
  3. #include   
  4. #include   
  5. int main(int argc, char *argv[]) {   
  6. char line[BUFSIZ];   
  7. lua_State *L = lua_open(0);   
  8. lua_baselibopen(L);   
  9. lua_iolibopen(L);   
  10. lua_strlibopen(L);   
  11. lua_mathlibopen(L);   
  12. while (fgets(line, sizeof(line), stdin) != 0)   
  13. lua_dostring(L, line);   lua_close(L);   return 0;   } 

運(yùn)行結(jié)果

本程序的功能是實(shí)現(xiàn)一個(gè)Lua解釋器, 輸入的每行字符都會(huì)被解釋成Lua并執(zhí)行.

與上例不同的是, 本例調(diào)用了Lua的一些標(biāo)準(zhǔn)庫(kù).

程序說(shuō)明

* #include 包含Lua的標(biāo)準(zhǔn)庫(kù)

* 以下這幾行是用來(lái)讀入Lua的一些庫(kù), 這樣偶們的Lua程序就可以有更多的功能.

lua_baselibopen(L);

lua_iolibopen(L);

lua_strlibopen(L);

lua_mathlibopen(L);

4.試試看

把上面兩個(gè)小例子在你熟悉的編譯器中編譯執(zhí)行, 并試試能否與Lua源碼樹(shù)一起編譯


網(wǎng)站欄目:通過(guò)例子學(xué)習(xí)Lua(5)—Lua與C交互入門(mén)
網(wǎng)頁(yè)URL:http://www.dlmjj.cn/article/dphjepc.html