c调lua, lua调c

17 篇文章 0 订阅
#include <iostream>
#include <math.h>


extern "C"
{
    #include "lua.h"
    #include "lauxlib.h"
    #include "lualib.h"
};


void printStackSize(lua_State* L)
{
    int nele = lua_gettop(L);


    std::cout << std::endl << "=====";
    std::cout << nele << "=====" << std::endl;
}


//lua 调 c
int c_fun_average(lua_State* L)
{
    int n = lua_gettop(L);
    double sum = 0.f;
    
    for (int i = 1; i <= n; i++)
    {
        if (!lua_isnumber(L, i))
        {
            lua_pushstring(L, "incorrect argument to 'average'");
            lua_error(L);
        }


        sum += lua_tonumber(L, i);
    }
    
    lua_pushnumber(L, sum / n);
    lua_pushnumber(L, sum);


    return 2;
}


void luaCallC()
{
    lua_State* L = luaL_newstate();
    
    luaL_openlibs(L);//加载所有lua库


    lua_register(L, "lu_average", c_fun_average);
    luaL_dofile(L, "test0.lua");


    lua_close(L);
}


//c 调 lua
void cCallLua()
{
    lua_State* L = luaL_newstate();
 
    luaopen_base(L); //加载部分lua库
    luaopen_table(L);
    luaopen_io(L);
    luaopen_string(L);
    luaopen_math(L);


    luaL_dofile(L, "D:\\myprograms\\lua_test\\test0.lua");


    lua_getglobal(L, "func_c_lua");
    lua_pushnumber(L, 1);
    lua_pushnumber(L, 2);
    lua_pcall(L, 2, 2, 0);
    
    int result_sum = lua_tointeger(L, -1);
    lua_pop(L, 1);
    int result_avg = lua_tointeger(L, -1);
    lua_pop(L, 1);


    lua_close(L);
}


int main()
{
    //c调lua, lua调lua, lua调c
    lua_State* L = luaL_newstate();


    luaL_openlibs(L);


    lua_register(L, "lu_average", c_fun_average);
    luaL_dofile(L, "D:\\myprograms\\lua_test\\test0.lua");


    lua_getglobal(L, "func_c_lua");
    lua_pushnumber(L, 1);
    lua_pushnumber(L, 2);
    lua_pcall(L, 2, 2, 0);


    int result_sum = lua_tointeger(L, -1);
    lua_pop(L, 1);
    int result_avg = lua_tointeger(L, -1);
    lua_pop(L, 1);


    lua_close(L);


    std::cout << "sum = " << result_sum << "    avg = " << result_avg << std::endl;


    return 0;

}

===================================

test0.lua 

===================================

function fun_lua_c(a, b)
    print("call myfunc...")
    print(a, b)
    avg, sum = lu_average(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    return avg, sum
end


function func_c_lua(a, b)
    return fun_lua_c(a, b)
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值