本文主要介绍了c++利用LuaIntf调用Lua的相关内容,分享出来供大家参考学习、下面话不多说了,来一起看看详细的介绍吧。
空白LuaTest:: OnResponse (uint32_t uLuaRpcId, const std:: string&sRespContent)常量 { 使用LuaIntf:: LuaRef; LuaRef要求(m_pLuaState,“需要”); 尝试{ LuaRef处理程序=require.call(“client_rpc_response_handler”); 处理程序。dispatchStatic(“处理”,uLuaRpcId sRespContent); } 抓住(const LuaIntf:: LuaException&e) { std:: cerr & lt; & lt;“失败的调用lua client_rpc_response_handler.handle (),“ & lt; & lt;e.what () & lt; & lt;std:: endl; } }
这是测试客户端代码,可以写Lua代码测试服务器。
Lua代码中发出一个Rpc请求时,会在Lua中保存一个回调,待收到应答时触发回调。通过uLuaRpcId来索引该回调。
sRespContent是收到的应答包,将在lua中解包。
OnResponse()就是调用了Lua代码:
要求(“client_rpc_response_handler”)。处理(uLuaRpcId sRespContent)
这里主要是在windows利用VS2015完成,首先是配置lua环境,包含lua的头文件,连接器里面链接lua的静态库,然后就是包含lua-intf的代码,具体如下表
# include & lt; iostream> # include & lt; lua.hpp> # include & lt; LuaIntf/LuaIntf.h> # include & lt; string> const char SCRIPTS_DIR[]=" . ./脚本”; 使用名称空间性病; struct lua_State; 类TestLog { 公众: 静态TestLog * getInstance () { 静态TestLog实例; 返回和实例; } ~ TestLog (); 空白日志(常量字符串,str); 空白BindLua (lua_State * l); 私人: TestLog (); }; TestLog: TestLog () { } TestLog:: ~ TestLog () { } 空白TestLog:日志(常量字符串,str) { cout & lt; & lt;str & lt; & lt;endl; } 名称空间 { 使用LuaRef=LuaIntf: LuaRef; 空白LuaLog(常量字符串,str) { TestLog: getInstance()→日志(str); } 名称空间LuaTestLog { 空白绑定(lua_State * L) { 断言(L); LuaIntf: LuaBinding (L) .beginModule (“c_testlog”) .addFunction(“日志”,和LuaLog) .endModule (); } }; }; 空白TestLog: BindLua (lua_State * l) { LuaTestLog:绑定(l); } int main () { lua_State * l=luaL_newstate (); luaL_openlibs (l); TestLog: getInstance ()→BindLua (l); cout & lt; & lt;“mmmmmmmmmmm”& lt; & lt;endl; luaL_dofile (l,“test.lua”); 系统(“暂停”); 返回0; }
日志。lua代码如下:
本地日志={} 本地日志=c_testlog.log 日志功能:新(log_name) 断言(“表”==类型(自我)) 断言(不是log_name或者“字符串”==类型(log_name)) 本地日志={} 日志。log_name=log_name或“日志” setmetatable(日志,自我) 自我。__index=自我 返回日志 结束 日志功能:set_log_name (log_name) 自我。log_name=log_name 结束 日志功能:信息(模式,…) 日志(字符串。格式(模式,…)) 结束 日志功能:调试() print (“ssssssssssssssssssssssssss”) 结束 返回日志
测试。lua代码如下:
本地函数main () print (“dddddddddddddddddddddddd”) 当地p=" . ./testLuaIntf " 包中。路径=包。路径…”;“. .p . .“/薄!皌estLuaIntf”. ./& # 63;.lua” ——包。路径=包。路径. .“E: \ VSProject \ & # 63; .luac” print (“bbbbbbbbbbbbbbbbbbbbbbbbbbbbb”) 本地日志=要求(“日志”):新(“svn_log”) 日志:信息(“% d…”, 1) ——:新(“svc_log”) print (“ssssssssssssssssssssssss”) 结束 xpcall(主要功能(…) 当地味精={…}; 对于k、v成对(味精) 打印(k=" . .tostring (k) . .“v=" . .tostring (v)) 结束 打印(tostring () . .“123”) )c++利用LuaIntf调用Lua的方法示例