test.cpp文件
/*Lua调用C/C++函数/库(函数压栈方式)*/
#include<iostream>
using namespace std;
#include<lua.hpp>
/*
当我们需要在Lua里面调用C/C++函数时,所有的函数都必须满足以下函数签名:
typedef int (*lua_CFunction) (lua_State *L);换句话说,所有的函数必须接收一个lua_State作为参数,同时返回一个整数值。因为这个函数使用Lua栈作为参数,所以它可以从栈里面读取任意数量和任意类型的参数。而这个函数的返回值则表示函数返回时有多少返回值被压入Lua栈。(因为Lua的函数是可以返回多个值的)
*/
static int math_abs(lua_State *L)
{
lua_pushnumber(L, abs((int)luaL_checknumber(L, 1))); //获取传入的参数
return 1;
}
static int math_cos(lua_State *L)
{
lua_pushnumber(L, cos((double)luaL_checknumber(L, 1)));
return 1;
}
static int math_sin(lua_State *L)
{
lua_pushnumber(L, sin((double)luaL_checknumber(L, 1)));
return 1;
}
static int ShowMessage(lua_State * L)
{
lua_pushnumber(L, 1000);
printf("show message and push 1000 \n");
return -1;
}
//注册函数
void regist_function(lua_State *L)
{
//压栈后设置一个lua可调用的全局函数名
lua_pushcfunction(L, ShowMessage);
lua_setglobal(L, "showmess