// 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
*/