ToLua原理和使用教程

2021-08-13 09:32:27 字數 2698 閱讀 4844

tolua原理和使用教程

tolua是用來實現c++程式中的類、變數、函式等繫結到lua程式中。繫結後lua**可以直接呼叫c++程式中的類、變數、函式等等。

tolua做了哪些事

要想知道tolua原理,先了解tolua到底做了些什麼事。先看一下下面「lua實現get/set方法」的例子。這個例子包含了三個檔案luabind.cpp檔案、main.cpp檔案、a.lua檔案。

luabind.cpp檔案

extern "c" 

const char *handlesgetset = "handlesgetset";

extern double a /*= 166*/;

int a_get(lua_state*l)

int a_set(lua_state *l)

return 0;

}int index_event(lua_state*l)

else

return 1;

}int newindex_event(lua_state *l)

else

return 0;

}void bindlua(lua_state *l)

main.cpp檔案

#includeextern "c" 

using namespace std;

double a = 166;

void bindlua(lua_state *l);

int main()

printf("a = %f\n\n\n", a);

a = a+1000;

if (0 != lual_dofile(l, "a.lua"))

printf("a = %f\n", a);

lua_close(l);

return 0;

}

a.lua檔案

print(a)

a = a+1

print("c=", c)

b = "adas"

print("b=", b)

這個個例子實現了將c++程式中的

double

a變數繫結到了lua程式中。在c++程式中改變了變數a的值,lua程式中可以獲取改變後的值,同樣lua程式中對變數a賦值後,c++程式也可以獲取賦值後的值,具體原理參見:lua任意型別的get/set方法,

三個檔案的作用如下。

luabind.cpp檔案:  實現將變數

double

a繫結到lua程式中

main.cpp檔案: c程式**

a.lua檔案:lua程式**

可以看到為了繫結

double

a變數,luabind.cpp中的**並不少。為了簡化這種繫結,我們可以使用tolua來實現繫結。tolua可以幫我們生成luabind.cpp檔案,我們只需要將生成後的檔案加入到程式中即可完成繫結。

如何生成lua繫結檔案

要生成繫結檔案,首先我們需要乙個tolua++.exe的程式,然後還需要乙個.pkg檔案。.pkg檔案是乙個**檔案,**格式與c++類似。我們首先需要編寫乙個pkg檔案,有了這個檔案之後,然後使用tolua++程式對pkg程式進行轉換,轉換後就就會生成相應的繫結檔案。具體操作,請看後續文章。

tulua官網

,更新到tolua-5.2.4,支援lua5.2.4。官網只提供了tolua的源**,沒有提供任何程式。

lib目錄包含了程式使用tolua時需要包含的庫的**,因為**比較少,我一般直接將lib資料夾中的**直接包含到程式中。

vs2015編譯tolua++.exe程式

在bin目錄下有兩個.c檔案,tolua.c、toluabind.c,將這兩個檔案加入到專案中,另外專案中還須要lua5.2.4**和lib目錄下的**。如下:

編寫pkg檔案

pkg檔案語法,這裡不講解,具體情況tolua官網:tolua-3.2.html

。語法規則不多,與c++非常接近,很容易看懂。

這裡編寫乙個繫結double a變數的方法。

bindlua.pkg檔案

$extern double a;

double a;

生成繫結檔案

tolua++.exe支援的命令引數。

執行以下命令生成繫結檔案。

使用繫結檔案

將生成的繫結檔案bindlua.cpp新增到專案中,另外還需要新增tolua源**src/lib目錄下的檔案到專案中。如下:

Tolua使用筆記三 Tolua協程用法

案例5 這一章講的是lua中的協程 如果我沒記錯的話,lua中沒有多執行緒,只有協程,lua的協程自帶的用起來有點侷限性,tolua中協程由於重寫了部分的方法,變得更加方便了 核心 如下 function cofunc print coroutine started local i 0 for i ...

Tolua使用筆記三 Tolua協程用法

案例5 這一章講的是lua中的協程 如果我沒記錯的話,lua中沒有多執行緒,只有協程,lua的協程自帶的用起來有點侷限性,tolua中協程由於重寫了部分的方法,變得更加方便了 核心 如下 function cofunc print coroutine started local i 0 for i ...

centos下簡單使用tolua

3 編寫測試工程,編寫pkg檔案用tolua命令生成標頭檔案和可執行檔案 tolua o luafun.cpp h luafun.h luafun.pkg luafun.pkg include fun.h struct param class girl 把生成的標頭檔案和cpp檔案都加入到工程中同時...