lua學習歷程(2)

2021-08-25 19:46:38 字數 1997 閱讀 8261

lua環境由所有可操作的資料構成,入編譯好的函式,變數以及其他執行時記憶體,這些資料儲存在乙個稱為lua_state的結構中。lua環境是用來傳送和接受資料的地方,它利用棧lua stack來達成目的,lua stack只能通過lua的api來訪問。

c++**和lua的互動是雙向的。

我們可以從lua指令碼中呼叫c++函式的介面,而這些介面被稱為luaglue函式,因為它們可以在lua環境中整合c++的功能,是讀取c++資料,呼叫c++函式的主要工具。

luaglue函式的優點:

當需要呼叫c++函式時,就通過luaglue來完成操作。我們可以先用lua來編寫需要的函式,當發現效能瓶頸的時候再換成c++實現,因為程式的呼叫幾乎是一樣的。

clua類有獲取luaglue函式的引數方法。clua::getstringargument方法返回指向空值終止字串的指標或者null表示引數錯誤。clua::getnumberargument方法返回雙精度浮點數或者0.0表示沒有引數。兩個方法都有乙個引數來指定要獲取的引數位置,從1開始,表示第乙個引數。

clua::pushstring函式或者clua::pushnumber函式可以向lua棧中存入返回值。

最好定義乙個區域性變數來儲存引數的個數,並初始化為1(lua都是從1開始的),另外建議每次都返回相同個數的返回值,不夠要用預設值來代替,為了避免出現nil值的錯誤。

建立lua執行環境

lua_state *pluastate=lua_open();

luaopen_base(pluastate);

lua_iolibopen(pluastate);

lua_strlibopen(pluastate);

lua_mathlibopen(pluastate);

lua_dblibopen(pluastate);

建立乙個文件,裡面記錄著所有的luaglue函式以及它們的引數資訊,甚至還包括在每個專案中的例項。這個文件將會成為指令碼程式設計師非常重要的參考工具。

用事件驅動的方式可以讓c++程式和lua指令碼環境互動。

處理錯誤的方式:在lua中捕抓它們,然後再丟擲c++異常,異常處理程式會開啟乙個標準的對話方塊輸出lua提供的訊息然後再關閉程式。從c呼叫lua時,採用了一種「受保護的呼叫」的方式。lua不再用它正常的錯誤處理系統,而是返回錯誤**和字串給主調函式。當lua返回錯誤的時候,會建立cerror物件,返回的錯誤字串會追加上錯誤發生地點的相關資訊。主程式包含在乙個大的try……catch程式塊中,在catch中會呼叫cerror report方法(顯示對話方塊),然後結束程式。

registerevent函式告訴gui系統事件處理lua函式的名字並啟動事件流。

startgui.lua檔案是gui指令碼系統的入口,用它來定義包含gui_key_press事件**變數。

與gui系統相關的luaglue函式

rungui(「inte***ce.lua」)

rungui()函式執行傳入的lua**檔案,指示gui系統建立乙個新的介面,或者重新啟動之前的介面。這個介面會變成當前介面。這個lua檔案應當通過luaglue函式registerevent定義並註冊事件處理程式。

registerevent(「eventfunction」)

registerevent()函式告訴gui系統呼叫相應函式來響應當前介面發出的gui事件

shell程式的擴充套件

通過繼承的方式進行擴充套件,例如cbase:init

所有新增到myglue陣列的函式都會在lua中自動註冊。

除錯視窗

主程式通過例項化cwinconsole物件建立除錯視窗,只有使用常用的lua文字才能直接把除錯程式鏈結到主程式,使用cwinconsole方法在視窗中插入文字和print luaglue函式的實現,在視窗的底部有乙個輸入控制項,剩下的部分用來顯示lua和c++程式的訊息。輸入區域檢測到鍵按下時候,就會向視窗傳送輸入命令,輸出區域就會顯示lua或者主程式向物件傳遞的訊息,它不會產生c++異常,只會單純地輸出lua的錯誤資訊。

登錄檔通過鍵值的方式來儲存不同的資料。

學習歷程 JSP篇(2)

jsp內建物件 1 request物件 獲取客戶端和伺服器端的資訊 常用的方法 獲取主機和客戶機的資訊 獲取主機ip getremoteaddr 獲取伺服器端口 getserverport 2 response物件 設定頭資訊 response.setcontenttype string type ...

Lua 學習(2) Lua 基本語法

lua 提供了互動式程式設計模式。我們可以在命令列中輸入程式並立即檢視效果。lua 互動式程式設計模式可以通過命令 lua i 或 lua 來啟用 lua i lua 5.3.0 lua.org,puc rio 在命令列中,輸入以下命令 print hello world!接著我們按下回車鍵,輸出結...

c sharp 菜鳥的學習歷程2

1.值型別有三種 簡單值型別,結構體 關鍵字 struct 列舉 關鍵字 enum 2.值型別的資料是在棧上申請記憶體來儲存的,它寄存的類是valuetype class program static gamestate gamestate gamestate.gamestart 宣告乙個列舉變數並...