• 大小: 1KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2024-01-10
  • 语言: 其他
  • 标签: lua  

资源简介

现在最新版本lua,lua-5.2.3。

资源截图

代码片段和文件信息

/************************************************************************/
/* C/C++调用lua函数*/
/* url = http://blog.csdn.net/pizi0475/article/details/5398497 */
/************************************************************************/
#include 
#include 
#include 
#include 

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

using namespace std;
/************************************************************************/
//函数功能:调用lua函数
//函数参数:
// L lua虚拟机
// x 
// y
//函数返回:
// sum
//核心函数 lua_call()
/*
调用一个函数。

要调用一个函数请遵循以下协议: 首先,要调用的函数应该被压入堆栈; 接着,把需要传递给这个函数的参数按正序压栈; 
这是指第一个参数首先压栈。 最后调用一下 lua_call; nargs 是你压入堆栈的参数个数。 当函数调用完毕后,所有的参数以及函数本身都会出栈。
而函数的返回值这时则被压入堆栈。 返回值的个数将被调整为 nresults 个, 除非 nresults 被设置成 LUA_MULTRET。
在这种情况下,所有的返回值都被压入堆栈中。 Lua 会保证返回值都放入栈空间中。
函数返回值将按正序压栈(第一个返回值首先压栈), 因此在调用结束后,最后一个返回值将被放在栈顶。
被调用函数内发生的错误将(通过 longjmp)一直上抛。
*/
/************************************************************************/


int luaadd(lua_State *L int x int y)
{
int sum;
/*通过名字获取Lua函数*/
lua_getglobal(L“add“);
/*向栈中压入第一个参数*/
lua_pushnumber(Lx);
/*向栈中压入第二个参数*/
lua_pushnumber(Ly);
/*调用函数*/
lua_call(L21);
/*得到结果
把给定索引处的 Lua 值转换为 lua_Integer 这样一个有符号整数类型。 
这个 Lua 值必须是一个数字或是一个可以转换为数字的字符串否则,lua_tointeger 返回 0 。*/
sum = (int)lua_tointeger(L-1);
/*从堆栈中弹出 n 个元素*/
//n
lua_pop(L1);
return sum;
}

int main()
{
int sum;
/*初始化lua虚拟机*/
lua_State *L = luaL_newstate();
/*载入lua基本库*/
luaL_openlibs(L);
/*载入脚本*/
luaL_dofile(L“./script/test.lua“);
/*调用lua函数*/
sum = luaadd(L1015);
/*显示结果*/
cout<<“The sum = “< /*清除lua虚拟机*/
lua_close(L);
/*显示结果并暂停*/
cout<<“Press enter to exit…“< getchar();
return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2219  2014-08-27 09:06  main.cpp
     目录           0  2014-08-26 16:11  script\
     文件          38  2014-08-26 16:11  script\test.lua

评论

共有 条评论