Lua:lua调用C++

本文介绍了如何在Lua中调用C++函数,详细解析了通信过程和数据在虚拟栈中的交互,包括lua_State指针的作用、数值和各种类型的入栈操作。同时,展示了C++读取Lua全局变量、table及调用函数的方法,通过实例代码进行讲解。
摘要由CSDN通过智能技术生成

接上一篇文章:C++调用Lua
本文在上一篇文章的基础上,使用Lua调用C++。使用文章:https://zhuanlan.zhihu.com/p/96848521
的方法。
本文的Lua版本为5.3.4

Lua调用C++

具体过程为:
1,Lua调用C++中的函数Average
2,Average返回结果给Lua

#include <stdio.h>
#include <string.h>
#include <iostream>

extern "C"
{
   
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
}
using namespace std;
lua_State* L;//C++与Lua的通信机制

int Average(lua_State *L)
{
   
	//code3   lua_gettop是取出栈顶的索引值。此时栈顶的索引值大小就是站内元素的个数
	int n = lua_gettop(L);
	double sum = 0;
	//code4 使用循环变量站内所有的元素,通过lua_tonumber取出栈内的值,然后进行相加操作。
	for (int i = 1; i <= n; ++i)
		sum += lua_tonumber(L, i);
	//code5 将运算后的值返还给Lua。把要返回的值再压入栈。此时此时栈内7条数据,参考栈的运行图Log index 2
	lua_pushnumber(L, sum / n);//average
	lua_pushnumber(L, sum);//sum
	//code6 告诉lua主程序,返回2个值。lua这是可以用参数接受这两个值
	return 2;

}

int main()

{
   

	L = luaL_newstate();//这一点与原文方法不一样,5.3.5版本中使用luaL_newstate初始化L,而原文使用lua_open
	luaL_openlibs(L);
	//code1 lua_register注册函数把Lua函数和C++函数进行绑定。其实就是先用lua_pushcfunction把在c++中定义的函数压如栈中,然后lua_setglobal来设置栈顶的元素对应的值,这样就可以把lua函数和栈顶的c++函数建立引用关系。
	lua_register(L, "average", Average);
	//code2  加载并执行lua脚本,此时lua中的函数average被执行,同时向栈中压如5个参数。参考栈的运行图Log index 1
	 luaL_dofile(L, "testLC.lua");
	lua_close(L);
	printf("Press enter to exit...");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值