一個完整的例子試驗了一個完整的例子。在C++中生成一個類,注冊到lua。從lua調用C++類的成員函數。在Alternate.lua中寫了階乘函數factorial。從C++中調用factorial。Alternate.lua如下:print("nowinalternate.lua");print("initialnumberofAxhSystem:"..AxhSystem:GetNumber());Axh" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

LuaPlus學習(四)

系統 1796 0

<--!版權所有foruok,轉載注明出處!-->

一個完整的例子

試驗了一個完整的例子。 在C++中生成一個類,注冊到lua。 從lua調用C++類的成員函數。 在Alternate.lua中寫了階乘函數factorial。 從C++中調用factorial。 Alternate.lua如下:
print( " nowinalternate.lua " ); print( " initialnumberofAxhSystem: " ..AxhSystem:GetNumber()); AxhSystem:SetNumber( 15 ); print( " Changethenumberfromlua,new: " ..AxhSystem:GetNumber()); print( " NowSetmessageto'Helloworld' " ); AxhSystem:SetMessage( " Helloworld " ); print( " AxhSystem:GetMessagereturn: " ..AxhSystem:GetMessage()); print( " now,enteranumbertochangeAxhSystem'snumber: " ); num = io.read( " *number " ); print( " youenter: " ..num); print( " settoAxhSystem " ) AxhSystem:SetNumber(num); print( " AxhSystem'snewnumber= " ..AxhSystem:GetNumber()); functionfactorial(n) if (n == 0 )then return 1 ; else return n * factorial(n - 1 ); end end
C++代碼如下:
class CAxhSystem ... { public : CAxhSystem():m_nNumber( 0 ) ... { memset(m_szMsg, 0 , sizeof (m_szMsg)); } ~ CAxhSystem() ... { } void SetNumber( int num) ... { m_nNumber = num; } int GetNumber() ... { return m_nNumber; } void SetMessage( const char * szMsg) ... { if (szMsg) _tcsncpy(m_szMsg,szMsg, 256 ); } char * GetMessage() ... { return m_szMsg; } protected : int m_nNumber; char m_szMsg[ 256 ]; } ; CAxhSystemg_system; LuaStateOwnerg_state; LuaObjectg_globalObj; int InitLua() ... { g_state -> OpenLibs(); g_globalObj = g_state -> GetGlobals(); return 0 ; } int RegisterObject() ... { LuaObjectaxhmetaobj = g_globalObj.CreateTable( " AxhMetaTable " ); axhmetaobj.SetObject( " __index " ,axhmetaobj); // registerfunctor axhmetaobj.RegisterObjectDirect( " SetNumber " ,( const CAxhSystem * ) 0 ,CAxhSystem::SetNumber); axhmetaobj.RegisterObjectDirect( " GetNumber " ,( const CAxhSystem * ) 0 ,CAxhSystem::GetNumber); axhmetaobj.RegisterObjectDirect( " SetMessage " ,( const CAxhSystem * ) 0 ,CAxhSystem::SetMessage); axhmetaobj.RegisterObjectDirect( " GetMessage " ,( const CAxhSystem * ) 0 ,CAxhSystem::GetMessage); // getluaobject LuaObjectluasys = g_state -> BoxPointer( & g_system); luasys.SetMetaTable(axhmetaobj); g_globalObj.SetObject( " AxhSystem " ,luasys); return 0 ; } int _tmain( int argc,_TCHAR * argv[]) ... { InitLua(); RegisterObject(); g_state -> DoFile( " Alternate.lua " ); LuaFunction < int > factorial = g_state -> GetGlobal( " factorial " ); printf( " Nowcall'factoral'inAlternate.lua,enteranumber: " ); int number; scanf( " %d " , & number); printf( " Youennter%d,it'sfactorial=%d " ,number,factorial(number)); return 0 ; }
OK,到這里已經可以在lua和c++之間做一些交互了,可以根據需要實現我們的目標了。 接下來我要好好學習lua了,不然沒辦法用它來寫復雜的邏輯。 <--!版權所有foruok,轉載注明出處!-->

LuaPlus學習(四)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 平远县| 儋州市| 徐汇区| 潍坊市| 临漳县| 铅山县| 大竹县| 高陵县| 株洲市| 郯城县| 土默特右旗| 嘉禾县| 建昌县| 柏乡县| 剑川县| 闵行区| 合阳县| 定南县| 昆明市| 乌拉特前旗| 河东区| 长沙县| 澄迈县| 岗巴县| 达尔| 南投市| 苏尼特右旗| 大庆市| 澄迈县| 夹江县| 红河县| 静海县| 奇台县| 丘北县| 循化| 乐都县| 清镇市| 唐河县| 丰镇市| 赤水市| 体育|