C与Lua的交互

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值