您的位置:首页 > 编程语言 > Lua

Lua 与 C++的简单交互

2012-03-20 21:24 489 查看
// test.cpp : 定义控制台应用程序的入口点。
//

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

static int print(lua_State* L)
{
/*从栈里拿lua调用时传过来的参数*/
int sum = lua_tointeger(L, 1); //当Lua调用C函数的时候,第一个参数总是在这个私有栈的index=1的位置。

/*把结果返回给lua*/
lua_pushnumber(L, sum);
return 1;
}

lua_State* L;

int luaadd(int x,int y)
{
int sum;
/* lua中的函数*/
lua_getglobal(L, "add");

/* 压入虚拟栈的第一个值*/
lua_pushnumber(L, x);

/* 第二个值*/
lua_pushnumber(L, y);

/* 调用传入的两个值,并返回一个结果*/
lua_call(L, 2, 1);  //所有的参数以及函数本身都会出栈。而函数的返回值这时则被压入堆栈

/*得到结果,由于返回类型不同这里要显示的强制转换*/
sum = (int)lua_tointeger(L, -1);
lua_pop(L, 1);

return sum;

}
int _tmain(int argc, _TCHAR* argv[])
{
int sum;
/* Lua初始化*/
L = lua_open();	// 对于.0以后版本的Lua,建议使用luaL_newstate代替

/* 压入函数*/
//lua_pushcfunction(L, print);
/* 把函数赋予全局变量*/
//lua_setglobal(L, "myPrint");
lua_register(L, "myPrint", print); //这个等价于上面两个

/*加载文件add.lua */
luaL_dofile(L, "lua/Init.lua");
//调用lua
sum = luaadd( 200, 50 );
printf("sum=%d\n",sum);

return 0;
}

//lua/Init.lua 内容
/*
function add(x, y)
--像c那样调用,得到c函数push进去的值
sum = myPrint(x+y)
return sum
end

function sub(x, y)
return x - y
end
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: