使用LuaPlus在C 專案中整合Lua指令碼

2021-04-22 17:46:15 字數 1637 閱讀 9590

使用luaplus在c++專案中整合lua指令碼

2008-07-16 00:02

花了兩天時間,費了好大的功夫才實現了c++專案中整合lua指令碼的可行性分析。下面的工作就是去寫指令碼了,在寫指令碼之前先把c++整合lua的經驗總結一下。

luabind,確實不錯,很強大。如果不是它需要boost庫支援的話我就選它了。

tolua++,我只是粗略的看了下,因為編譯太麻煩,很快就放棄了。不過看網上評價還不錯。

並不是因為boost不好,而是因為我的專案連帶工程源**都要投遞去應聘的,不能保證對方機器上也安裝了boost庫。

最後還是選擇了luaplus,感覺還可以,下面是使用經驗總結。

1。建立乙個state。

luastateowner* pstate = null;

pstate = new luastateowner(true);

if ( !pstate )

return e_outofmemory;

注意:luastateowner構造函式引數true表示在構造的過程中對lua標準庫進行初始化。這一點非常重要。一開始我呼叫的不帶引數的建構函式,然後在.lua中呼叫math.random()的時侯就一直失敗,今天研究了一下午才弄明白的。

2. 註冊c++函式到lua

(這一點我沒試,直接引用示例裡的)

update為ctest的乙個成員函式,

雙引號中的update是指註冊到lua中的函式名,在lua指令碼中使用update()即呼叫了test物件的update()函式。

4.從檔案中載入並執行指令碼

int iret = (*pstate)->dofile( "test.lua" );

if ( 0 != iret )

return false;

返回值為0表示成功,否則不成功.

5.c++獲取lua指令碼中的變數

float x = (*pstate)->getglobal( "x" ).getfloat();

注意,要在dofile之後才能從lua中獲取變數,此時檔案已被載入。

6.c++中呼叫指令碼裡的函式

luafunctionrandbuild = (*pstate)->getglobal("randbuild");

bool ret = randbuild();

test.lua檔案中:

function randbuild()

math.random(); --第一次的隨機數太小,合棄

x = math.random( -100, 100 );

return true;

end;

7.lua指令碼中呼叫c++函式

這裡可以呼叫的就是前面註冊過的c++函式,呼叫時直接使用註冊時的函式名。

比如第3步中的,如果指令碼中寫update(),就相當於在c++中test.update();

8.c++中直接呼叫註冊的lua函式

(*pstate)->dostring( "update()" );

這一句意思是只執行"update()"這一句指令碼。

草草的寫完,有點亂,就將就著看吧。

類別:指令碼語言 |

435) |

'); if(pre[0])

/*]]>*/

lua中的隨機數

使用LuaPlus在C 專案中整合Lua指令碼

花了兩天時間,費了好大的功夫才實現了c 專案中整合lua指令碼的可行性分析。下面的工作就是去寫指令碼了,在寫指令碼之前先把c 整合lua的經驗總結一下。luabind,確實不錯,很強大。如果不是它需要boost庫支援的話我就選它了。tolua 我只是粗略的看了下,因為編譯太麻煩,很快就放棄了。不過看...

在專案中整合測試

使用小規模測試降低風險 開發人員編寫 和缺陷 tdd是在專案中整合測試最簡便的方式 單元測試不是萬能藥 使用多種測試技巧 確定每個團隊成員在測試中的角色 測試人員稱職嗎 一流的測試人員具有足夠的創造力,編碼工作之前,就能評估系統的設計和架構 編寫 過程中,測試人員會設計和實現他們的測試元件 會衡量測...

在專案中整合ironpython以獲得二次開發能力

這裡有個鏈結,主要是講如何在ironpython裡面使用linq to objects功能 不過我除錯的時候不知道應該怎麼測試這段 pipeline defjoin outer,inner,outerkey,innerkey,fun this join return outer.ext.join o...