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檔案都加入到工程中同時...