Chinaunix首页 | 论坛 | 博客
  • 博客访问: 529056
  • 博文数量: 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 18:34:52

1.vs2013新建一个dll空工程myLuaLib,然后右键工程->属性->配置属性->C/C++->附加包含目录,将lua5.3.1源码路径设置上去。
2.源文件添加文件myLuaLib.cpp,添加代码如下:

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. extern "C"
  3. {
  4. #include "lua.h"
  5. #include "lauxlib.h"
  6. #include "lualib.h"
  7. }
  8. // 这一步很重要,否则生成dll动态链接库的时候会提示错误,这里只需要把生成的lua-5.3.1.lib文件拷贝到当前.cpp文件同级目录下即可
  9. #pragma comment(lib,"lua-5.3.1.lib")

  10. static int averageFunc(lua_State *L)
  11. {
  12.     int n = lua_gettop(L);
  13.     double sum = 0;
  14.     int i;

  15.     /* 循环求参数之和 */
  16.     for (i = 1; i <= n; i++)
  17.         sum += lua_tonumber(L, i);

  18.     lua_pushnumber(L, sum / n); //压入平均值
  19.     lua_pushnumber(L, sum); //压入和

  20.     return 2; //返回两个结果
  21. }

  22. static int sayHelloFunc(lua_State* L)
  23. {
  24.     printf("hello world!");
  25.     return 0;
  26. }

  27. static const struct luaL_Reg myLib[] =
  28. {
  29.     { "average", averageFunc },
  30.     { "sayHello", sayHelloFunc },
  31.     { NULL, NULL } //数组中最后一对必须是{NULL, NULL},用来表示结束
  32. };

  33. extern "C" __declspec(dllexport) int luaopen_myLuaLib(lua_State *L)
  34. {
  35.     //luaL_newlib(L, myLib);
  36.     //lua_setglobal(L, "array");
  37.     lua_newtable(L);
  38.     luaL_setfuncs(L, myLib, 0);
  39.     return 1; // 把myLib表压入了栈中,所以就需要返回1
  40. }

阅读(2418) | 评论(0) | 转发(1) |
0

上一篇:Lua调用C++ - 使用静态依赖的方式

下一篇:没有了

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