c++ 与 lua函数互调

// TestLua.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <string>
#include <iostream>

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


using namespace std;

lua_State* L;

//接口方法
static int Lua_Average(lua_State* lua)
{
	int n = lua_gettop(lua);  //返回战中元素的个数
	float sum = 0;
	int i = 1;
	for(i; i <= n; i++)
	{
		if(!lua_isnumber(lua, i))
		{
			lua_pushstring(L,"**** there has a error, argument has not number");
			lua_error(lua);
		}
		sum += lua_tonumber(lua, i);
	}

	lua_pushnumber(lua, sum/n);   //将数值返回lua
	lua_pushnumber(lua, sum);
	
	return 2;
}

int _tmain(int argc, _TCHAR* argv[])
{
	//初始化lua
	L = luaL_newstate();
	luaL_openlibs(L);

	//函数注册
	lua_register(L,"Average", Lua_Average);

	//加载lua脚本, 脚本放在工程目录下	
	luaL_loadfile(L, "testA.lua");
	int dwError = lua_pcall(L, 0 ,LUA_MULTRET,0);
	if(dwError != 0)
	{
		cout<<lua_tostring(L,-1);
		lua_close(L);
		return 1;
	}

	lua_getglobal(L, "avg");
	cout<<"avg is "<<lua_tostring(L, -1) << endl;
	lua_pop(L, 1);
	lua_getglobal(L,"sum");
	cout<<"sum = "<<lua_tointeger(L,-1)<<endl;
	lua_pop(L, 1);
	
	//调用 lua中的函数
	int a = 10;
	int b = 11;
	lua_getglobal(L,"SumFunc");
	lua_pushinteger(L,a);
	lua_pushinteger(L,b);
	int dwRet = lua_pcall(L,2,1,0);
	if(dwRet != 0)
	{
		cout<<lua_tostring(L, -1);
		lua_pop(L,1);
		return 0;
	}
	printf("sum: %d + %d = %ld\n", a,b,lua_tointeger(L,-1));
	lua_pop(L,-1);

	//调用结束,清除Lua 
	lua_close(L);
	return 0;
}

Lua 脚本


function SumFunc( a, b)
<span style="white-space:pre">	</span>return a + b;
end


avg, sum = Average(10, 20, 30, 40, 50)


print("The average is ", avg)


print("The sum is ", sum)

注:

1.  c++中的函数注册最好是在lua脚本加载之前完成注册,否则lua 文件如果在加载后就调用c++中的函数时会报错


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值