(使用lua++)Lua脚本和C++交互(四)
上一篇中,你已经可以在Lua里面用C++的函数了,那么咱们再增加一点难度,比如,我有一个CTest对象,要作为一个参数,传输给func_Add()执行,怎么办?
很简单,如果你对上面的代码仔细阅读,你会发现下面的代码一样简洁。为了支持刚才要说的需求,我们需要把Sample.lua再做一点修改。
function func_Add(x, y, f) -- New了一个CTest对象,并进行赋值操作,最后把结果打印在屏幕上 -- local test = CTest:new() -- test:SetData("I'm xiaotian") -- test:GetData() f:SetData("I'm xiaotian") f:GetData() return x..y; end
假设就是我们要传入的CTest对象。我们要在Lua里面使用它。(我们的CLuaFn都不用改,把main函数稍微改一下即可,来看看怎么写。)
#include "CLuaFn.h" int main(int argc, char* argv[]) { CLuaFn CLuaFn; CLuaFn.Init(); CLuaFn.InitClass(); CLuaFn.LoadLuaFile("Sample.lua"); CParamGroup ParamIn; CParamGroup ParamOut; char szData1[20] = {'\0'}; sprintf(szData1, "[yang]"); _ParamData* pParam1 = new _ParamData(szData1, "string", (int)strlen(szData1)); ParamIn.Push(pParam1); char szData2[20] = {'\0'}; sprintf(szData2, "[xiaotian]"); _ParamData* pParam2 = new _ParamData(szData2, "string", (int)strlen(szData2)); ParamIn.Push(pParam2); //只追加了这里 CTest* pTest = new CTest(); _ParamData* pParam3 = new _ParamData(pTest, "CTest", sizeof(CTest)); ParamIn.Push(pParam3); //追加结束 char szData4[40] = {'\0'}; _ParamData* pParam4 = new _ParamData(szData4, "string", 40); ParamOut.Push(pParam4); CLuaFn.CallFileFn("func_Add", ParamIn, ParamOut); char* pData = (char* )ParamOut.GetParam(0)->GetParam(); printf("[Main]Sum = %s.\n", pData); getchar(); return 0; }
运行看看输出结果:
既然已经到了这里,我们索性再加点难度,如果我要把CTest作为一个对象返回回来怎么做?很简单,且看。(运行中断,问题待解决)
#include "CLuaFn.h" int main(int argc, char* argv[]) { CLuaFn CLuaFn; CLuaFn.Init(); CLuaFn.InitClass(); CLuaFn.LoadLuaFile("Sample.lua"); CParamGroup ParamIn; CParamGroup ParamOut; char szData1[20] = {'\0'}; sprintf(szData1, "[yang]"); _ParamData* pParam1 = new _ParamData(szData1, "string", (int)strlen(szData1)); ParamIn.Push(pParam1); char szData2[20] = {'\0'}; sprintf(szData2, "[xiaotian]"); _ParamData* pParam2 = new _ParamData(szData2, "string", (int)strlen(szData2)); ParamIn.Push(pParam2); //只追加了这里 CTest* pTest = new CTest(); _ParamData* pParam3 = new _ParamData(pTest, "CTest", sizeof(CTest)); ParamIn.Push(pParam3); //追加结束 //char szData4[40] = {'\0'}; //_ParamData* pParam4 = new _ParamData(szData4, "string", 40); CTest* pTestRsult = NULL; _ParamData* pParam4 = new _ParamData(pTestRsult, "CTest", sizeof(CTest)); ParamOut.Push(pParam4); CLuaFn.CallFileFn("func_Add", ParamIn, ParamOut); //char* pData = (char* )ParamOut.GetParam(0)->GetParam(); //printf("[Main]Sum = %s.\n", pData); //接受Lua返回参数为CTest类型,并调用其中的方法 pTestRsult = (CTest* )ParamOut.GetParam(0)->GetParam(); pTestRsult->GetData(); getchar(); return 0; }