我之前看了一下lua 到C的调用,在好奇心的驱使下,如何从C到lua这个问题,看了一下网上的教程,会有一些文档是这么说的:
LuaEngine* engine = LuaEngine::getInstance();
int num = engine->executeGlobalFunction("helloLua");
CCLOG("Test end:%d", num);
helloLua是在lua中的全局函数:
function helloLua()
print("helloLua");
return 100;
end
好了,就这么简单,运行一下,看一下结果:
嗯,好了是不是感觉很简单,是的,网上的教程一般都是说的是这种无参数的调用,可是我还想知道如何传参使用呢。
如果想传参数,那么就需要这样写:
auto engine = LuaEngine::getInstance();
lua_State* L = engine->getLuaStack()->getLuaState();
lua_getglobal(L, "helloLua"); //method name
if (!lua_isfunction(L, -1))
{
CCLOG("[ERROR] helloLua should be a function! Please define as a global function in lua");
lua_pop(L, 1);
return;
}
lua_pushnumber(L, 66); //first params number
lua_pushinteger(L, 88); //second params int
int numArgs = 2; //arg number
int num = engine->getLuaStack()->executeFunction(numArgs);
CCLOG("Test end:%d", num);
我的lua代码是这样的:
function helloLua(a,b)
print("helloLua",a,b);
return a+b;
end
这里有一点需要注意一点,lua中的函数如果你想传参数进去,形参和实参必须数量保持一致,要不然就会找不到这个函数,这个从C++的角度也是很好理解的。好了,运行一下看下结果:
从结果上看,我是调用成功了,如果你还想传其他的参数或者,可以查看一下源码,修改参数类型。