Lua调用C++

基于前文《C++调用Lua》继续探索Lua调用C++函数的问题:

test_lua_call_cpp.cpp文件:

#include <stdio.h>
extern "C"{
#include "lua.h"
#include "lualib.h"
#include "luaxlib.h"
};


lua_State* L;
//这个函数将被Lua调用
static int average(lua_State *L)
{
//得到Lua函数传入的参数个数
int n = lua_gettop(L);
double sum = 0;
int i;
for (i = 1; i <= n; i++)
{
sum += lua_tonumber(L, i);
}
//向解释器的值栈中压入结果值
lua_pushnumber(L, sum / n);
lua_pushnumber(L, sum);
//指明返回参数有两个
return 2;


}


int main(int argc, char *argv[])
{
L = luaL_newstate();
luaopen_base(L);
luaL_openlibs(L);
luaL_loadfile(L, "add.lua");
lua_pcall(L, 0, LUA_MULTRET, 0);
//向解释器注册C++函数
lua_register(L, "cpp_average", average);
lua_getglobal(L, "cppGetAverageAndSum");


lua_pushnumber(L, 10);
lua_pushnumber(L, 20);
lua_pushnumber(L, 30);
lua_pushnumber(L, 40);
lua_call(L, 4, 2);


int sum = (int)lua_tonumber(L, -1);
lua_pop(L, 1);
int avg = (int)lua_tonumber(L, -1);
lua_pop(L, 1);


printf("Cpp Output The avg is %d\n", avg);
printf("Cpp Output The sum is %d\n", sum);


lua_close(L);
getchar();
return 0;
}

add.lua文件:

function add(x, y)
return x + y
end


function cppGetAverageAndSum(w,x,y,z)
avg, sum = cpp_average(w,x,y,z)
print("Lua Output The average is ", avg)
print("Lua Output The sum is ", sum) 
return avg, sum
end

运行结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值