Chinaunix首页 | 论坛 | 博客
  • 博客访问: 529081
  • 博文数量: 102
  • 博客积分: 2146
  • 博客等级: 大尉
  • 技术积分: 1146
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-09 17:32
文章分类

全部博文(102)

文章存档

2015年(14)

2014年(24)

2013年(5)

2012年(30)

2011年(16)

2010年(13)

分类: C/C++

2015-09-16 11:09:54

1:先上一个简单的Lua函数

点击(此处)折叠或打开

  1. function add(a,b)
  2.     return a + b
  3. end

2:再上C++代码

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;

  4. extern "C"
  5. {
  6. #include "lua.h"
  7. #include "lauxlib.h"
  8. #include "lualib.h"
  9. }
  10. void main()
  11. {
  12.     //1.创建一个新的lua state,分配内存,创建
  13.     lua_State *L = luaL_newstate();
  14.     if (L == NULL)
  15.     {
  16.         cout << "New state fail";
  17.         return;
  18.     }
  19.     #if 0
  20.     // 2.加载Lua代码
  21.     int bRet = luaL_loadfile(L, "hello.lua");
  22.     if (bRet)
  23.     {
  24.         cout << "Load file fail";
  25.         return;
  26.     }
  27.     
  28.     // 3.运行Lua脚本
  29.     bRet = lua_pcall(L, 0, 0, 0);
  30.     if (bRet)
  31.     {
  32.         cout << "pcall error" << endl;
  33.         return;
  34.     }
  35.     #else
  36.     // 运行lua脚本,这一步可以取代2,3步
  37.     luaL_dofile(L, "hello.lua");
  38.     #endif
  39.     // 此时栈顶为0,执行完毕lua_getglobal后压变量add入栈(lua中函数也是变量),栈顶为1,
  40.     bRet = lua_getglobal(L, "add");
  41.     // 压入参数1入栈,执行完毕lua_pushnumber后栈顶为2
  42.     lua_pushnumber(L, 12);
  43.     // 压入参数2入栈,执行完毕lua_pushnumber后栈顶为3
  44.     lua_pushnumber(L, 23);
  45.     // 执行add函数,2告诉lua栈中有2个参数,1告诉lua需要返回一个值,执行该函数时候,lua将参数2,参数1,函数名依次从栈取出然后执行,执行完毕后,把结果压入栈,所以执行完毕后栈顶为1,保存了返回结果给C++
  46.     lua_pcall(L, 2, 1, 0);
  47.     // lua执行完毕会将结果放在栈顶,这里读出栈顶的结果,并打印
  48.     int ret = lua_tonumber(L, -1);
  49.     cout << ret << endl
  50.     // 关闭当前lua state,释放内存
  51.     lua_close(L);
  52. }

阅读(1850) | 评论(0) | 转发(0) |
0

上一篇:Lua和C++交互

下一篇:C/C++获取Lua中的Table

给主人留下些什么吧!~~