使用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...