lua要调用C函数,需要将C函数告诉lua虚拟机(也就是注册到虚拟机),这样lua的脚本就可以调用C函数了。
同样为了方便,函数的调用需要的参数和返回的参数也都是通过栈来完成的。
每次lua调向C的时候,栈中的数据只有方法的参数,其他的多余的数据都清空了,吗吗??。
比如给lua注册了一个函数名是cpp_func,对应的函数是testLuaCallCpp(int a,int b);
那么lua里面直接写cpp_func(1,2);就调用了testLuaCallCpp函数了。不管参数是几个都是调用这个函数,因为虚拟机里保存了这个"cpp_func"的key就对应testLuaCallCpp函数的指针了。
下面给详细的代码:
#include "TestLuaCallCpp.h"
#include "LuaUtiles.h"
//
// 下面这2个函数就是普通的C函数
// 但lua只能调用typedef int(*lua_CFunction) (lua_State *L); 这种函数.
// 返回值描述参数的个数。
// 所以,我们需要自己写一个binding,来透传这些调用事件
// 这种自己写binding的方法,就相当于在我们原来代码的基础上,提供了lua接口了
//
// 返回a+b的值
int functionForLuaCall_add(int a,int b)
{
return a+b;
}
// 测试多返回值
bool functionForLuaCall_loadAB(int* num1,int* num2)