dmluaC++ & lua 自動(dòng)化引擎
dmlua是一個(gè)集合tolua(修改了部分源碼) 使用lua5.3版本的 C++ & lua 自動(dòng)化引擎.
1. project tolua 是 tolua,lua的庫(kù) 使用的是lua 5.3版本
2. project tolua++ 是tolua的工具源碼 通過(guò).pkg文件生成源碼文件
3. project dmluatest 是使用tolua+dmlua的例子
4. project dmlua 因?yàn)槎际穷^文件 所以沒(méi)有project 是針對(duì)tolua使用的封裝 他會(huì)自動(dòng)搜索 當(dāng)前執(zhí)行程序目錄上一級(jí) 所有的.lua文件(比如程序在 /home/user/debug/dmluatest.exe 那么他會(huì)搜索/home/user/目錄 有需求可以自己修改__GetScriptPath)
注意:
1. interface.pkg 里面 $#include "dmlua_typeid.h" 需要存在.
2. 需要在腳本里面new或者gc的struct或class 需要把構(gòu)造和析構(gòu)都顯式的導(dǎo)出
3. 如何導(dǎo)出一個(gè)類的部分接口
class sample {// tolua_export
public:
// tolua_begin
int GetID(){ return 0;}
};
// tolua_end
4. 如何調(diào)用接口
CDMLuaEngine oDMLuaEngine;
if (!oDMLuaEngine.ReloadScript()){ return;}
CRole *poRole = CRoleMgr::Instance()->CreateRole();
poRole->SetName("andy");poRole->SetHp(1);poRole->SetMp(1);
unsigned int dwTaskID = 100;
LResultINT oResult(-1);
// script.task.task.AcceptTask// script 目錄// task 目錄// task 腳本名// AcceptTask 函數(shù)名
// 注意事項(xiàng)
// 對(duì)象需要傳遞指針類型, 如果直接使用對(duì)象 會(huì)產(chǎn)生copy
// 只有傳遞指針類型的對(duì)象 才能返回出來(lái).
// 例如
oDMLuaEngine.Call("script.task.task.AcceptTask", poRole, dwTaskID, &oResult); //oResult可以返回出來(lái)
oDMLuaEngine.Call("script.task.task.AcceptTask", poRole, dwTaskID, oResult); //oResult無(wú)法返回出來(lái)
5. 性能 常規(guī)配置下 C++ call lua接口 性能大約是 200萬(wàn)/秒, 經(jīng)過(guò)測(cè)試發(fā)現(xiàn)瓶頸全部在lua提供的api上面. 說(shuō)明難以再優(yōu)化了. 如果還有性能需求 可以試試luajit等.
評(píng)論
圖片
表情
