Chinaunix首页 | 论坛 | 博客
  • 博客访问: 541596
  • 博文数量: 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 15:41:31

转载:http://www.cnblogs.com/sevenyuan/p/4511808.html

1. 新建一个空的win32控制台工程,记得在vc++目录中,把lua中的头文件和lib文件的目录包含进来,然后->链接器->附加依赖项->将lua51.lib和lua5.1.lib也包含进来。

2. 在目录下新建一个avg.lua如下:


点击(此处)折叠或打开

  1. avg, sum = average(10, 20, 30, 40, 50)
  2. print("The average is ", avg)
  3. print("The sum is ", sum)

3.新建test.cpp如下:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. extern "C" {
  3. #include "lua.h"
  4. #include "lualib.h"
  5. #include "lauxlib.h"
  6. }
  7.    
  8. /* 指向Lua解释器的指针 */
  9. lua_State* L;
  10. static int average(lua_State *L)
  11. {
  12.     /* 得到参数个数 */
  13.     int n = lua_gettop(L);
  14.     double sum = 0;
  15.     int i;
  16.    
  17.     /* 循环求参数之和 */
  18.     for (i = 1; i <= n; i++)
  19.     {
  20.         /* 求和 */
  21.         sum += lua_tonumber(L, i);
  22.     }
  23.     /* 压入平均值 */
  24.     lua_pushnumber(L, sum / n);
  25.     /* 压入和 */
  26.     lua_pushnumber(L, sum);
  27.     /* 返回返回值的个数 */
  28.     return 2;
  29. }
  30.    
  31. int main ( int argc, char *argv[] )
  32. {
  33.     /* 初始化Lua */
  34.     L = lua_open();
  35.    
  36.     /* 载入Lua基本库 */
  37.     luaL_openlibs(L);
  38.     /* 注册函数 */
  39.     lua_register(L, "average", average);
  40.     /* 运行脚本 */
  41.     luaL_dofile(L, "avg.lua");
  42.     /* 清除Lua */
  43.     lua_close(L);
  44.    
  45.     /* 暂停 */
  46.     printf( "Press enter to exit…" );
  47.     getchar();
  48.     return 0;
  49. }

执行一下,我们可以得到结果:

大概顺序就是:我们在C++中写一个模块函数,将函数注册到Lua解释器中,然后由C++去执行我们的Lua文件,然后在Lua中调用刚刚注册的函数。


阅读(1120) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~