Lua 与 C++的简单交互

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



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值