利用luabind將Lua嵌入到C 專案中(一)

2021-05-01 07:20:10 字數 2729 閱讀 5843

開篇——環境假設

by : hengstar

(欣恆)

(雖然本人文筆不好,水平也不高,不過下定決心要寫一篇文章和大家分享一些小小的成就也不容易

~同時也感謝大蝦

linkerlin

翻譯的luabind

文件給了英文水平不高的我很多幫助

^^ 文件在這:

)開場白(

ps:如果你覺得囉唆可以跳過它

-.-#

):本人是網遊開發人員,初次接觸

lua指令碼,由於原專案中的指令碼技術比較落後,開發人員使用起來諸多不便,所以想引入一套好的指令碼機制,在了解到了

lua的強大以及在遊戲行業的廣泛運用後,我毫不猶豫的選擇了它。在一段時間的

lua學習下來後發現要在乙個大型專案並且是已經上市運營的專案中加入這套東西實屬不容易,要考慮的東西太多,畢竟

c++和

lua語言上的差異還是比較大的,要完全的實現

c++和

lua之間的方便互動還是要費很大的功夫的,特別是在一些物件導向的特性諸如多型、繼承等大範圍在專案中使用的,而且給自己的時間並不多,好在從同事那了解到有

luabind

這號角色的存在,而且也是開源的,我馬上興起準備開始一起研究,由於舊**中大部分都是無法移植的**,在嵌入工作中遇到了一系列的麻煩

-.-隨後慢慢道來,不過經過幾天的努力鑽研,已經成功投入到專案中開始使用了,不過新版本暫時還未發布

…廢話先不說了,切入正題)一.將

luabind

加入到工程

必備:luabind

原始碼、lua sdk

及原始碼、

boost

原始碼vs

中新建靜態鏈結庫工程,將

luabind

原始碼路徑下的

src目錄中所有檔案新增到工程,編譯為

luabind

靜態鏈結庫(需要包含

luabind

原始碼解壓包後的根目錄、

lua的

include

檔案目錄、

boost

原始碼根目錄,注意工程選項,因為當時我們的專案工程選項的結構對齊方式是採用「一位元組對齊」,而編譯

luabind

靜態鏈結庫時用的是預設位元組對齊方式,所以總發生莫名其妙的錯誤),將編譯完的靜態鏈結庫載入到

c++專案中; 二.

將lua

加入到工程

方法同上 三.

建立luamanager

類需要包含的標頭檔案:

建立乙個專門用於管理與

lua指令碼引擎相關的管理器類,可以採用

singleton

(單件)

技術(詳見《設計模式》)

class luamanager

;大致需要實現如下方法(僅供參考,根據不同的工程需求可以用更適合自己工程的方式實現):

1. init

(初始化):用於初始化

luabool luamanager::init()

return registerall(); // 見下}

2. registerall

(註冊所有需要的內容):

學過lua的朋友一定知道c/c++中的函式等要在lua中呼叫需要註冊,如果直接用lua提供的方法註冊會很麻煩,隨著工程的規模的擴大還會提公升管理難度,這就是我選擇使用luabind的原因,它提供十分方便的機制封裝了c/c++類的繫結,已經函式的註冊,甚至c/c++中宣告的全域性變數也能直接註冊到lua中使用,(由於我們的專案**量比較龐大,為了方便維護,我將此方法分為了兩個,乙個專門用來註冊c++類的registerclasses和用於註冊全域性函式的registerfunctions,還會考慮加入乙個註冊全域性變數的registervars),**示例:

bool luamanager::registerall()

更多細節

請參見luabind

文件 http://blog.csdn.net/linkerlin/archive/2008/04/06/2254725.aspx

3. loadscript

(載入指令碼):用於載入寫好的

lua指令碼檔案(建議用編譯後的二進位制

luac

bool luamanager::

loadscript ( const string& fname )

return true;}

四.初始化

luamanager

如此簡單的工作就不多說了

…直接呼叫

init

並且用loadscript

載入相應的指令碼檔案即可

小結:本篇的內容比較簡單,快速概括了

luabind

嵌入到c++

工程的環境假設問題,很多資訊能在文件裡面找到,我這裡也就不想再多說,如果有不明白的可以找我,一定竭力為大家解答^^

這裡可以展現

lua的乙個強大之處也就是支援動態載入指令碼的功能,我目前的設想是準備把載入

lua指令碼的介面提供給乙個遊戲中的

gm指令,以後有指令碼的更新發布,只需要簡單的用gm…

)c++

語言特性造成和

lua的一些互動困難以及自己的解決方案和根據

luabind

原始碼了解到的一些簡單的互動機制,敬請期待^^

2009/7/25

Lua教程 C 嵌入Lua指令碼

讀後感悟 先講了環境了配置,然後著重講了c 中如何呼叫lua,適合入門。如果想學習語法,可以看 lua程式設計 雖然講的是lua5.1,但是很多語法還是可以學的。當你學會了最基本的c 與lua呼叫之後,就可以馬上學一些互動 了,而不是只是看書,那麼看了之後,你會很容易忘記的,之前我就是學習lua的時...

C 嵌入lua指令碼

現時遊戲開發裡比較多使用一門伺服器開發語言 指令碼作為開發,在此僅記錄c 嵌入 lua指令碼的過程 環境 mac,10.11.6 2.新建xcode 專案 4.解壓完畢之後,切入lua 5.x.x裡,執行make macosx,生成liblua.a檔案 5.配置路徑 選中project build ...

將視窗嵌入桌面

在試用某些ap時,發現有些ap的視窗可以嵌入桌面,這樣win d鍵的時候就可以看到,很方便。在網上搜尋了一下,原理就是將視窗的父視窗設定成桌面。這個父視窗在xp下通過findwindow program manager progman 找到,但是在win7下這個方法找到的父視窗就不好用了。用spy ...