1.C 调用Lua
#include <stdio.h>
#include <stdlib.h>#include <unistd.h>
#include <dlfcn.h>
#include <fcntl.h>
#include <string.h>
............
#include "lua.h"
#include "lauxlib.h"
#define false 0
#define true 1
#define Lua_Script "./script/test.lua"
int init_lua(lua_State *L)
{
L = luaL_newstate();//创建Lua在c中的使用环境
if (!L) {
printf("\nluaL_newstate failed!\n");
return false;
}
luaL_openlibs(L);//加载所有的Lua库函数
return true;
}
int load_lua_file(lua_State *L)
{
if (luaL_dofile(L, Lua_Script) != 0) { //加载lua脚本
printf("LOAD LUA %s %s\n", Lua_Script, "Fail");
return false;
}
printf("LOAD LUA %s %s\n", Lua_Script, "OK");
return true;
}
int proc_add_operation(lua_State *L,int a,int b)
{
lua_settop(L, -1); //指向栈顶
lua_getglobal(L, "test_func_add");//把字符串(lua函数名)压入栈中
lua_pushnumber(L, a);//参数入栈
lua_pushnumber(L, b);
int val = lua_pcall(L, 2, 1,0); //执行lua函数,入参(lua环境,参数个数,返回值个数,错误返回值)
if (val) {
printf("lua_pcall_error %d\n", val);
}
return (int)lua_tonumber(L, -1);
}
int call_Lua(lua_State *L)
{
int Val=0;
if(!init_lua(L))
{
goto CALL_FALSE;
}
if(!load_lua_file(L))
{
goto CALL_CLOSE;
}
Val = proc_add_operation(L,5,6);
printf("\n5 + 6 = %d\n",Val);
return true;
CALL_CLOSE:
lua_close(L);
return false;
CALL_FALSE:
return false;
}
int main()
{
lua_State *L;
if(!call_Lua(L))
{
printf("\n==call_Lua fail!==\n");
return 0;
}
return 0;
}