• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++调用Lua代码

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

这里是指linux下的调用。C与C++调用Lua略有不同,体现在:

1.头文件包含的方法

C中直接include 

1 #include <lua.h>
2 #include <lualib.h>
3 #include <lauxlib.h>

c++中要加extern "C"

1 extern "C"
2 {
3 #include <lua.h>
4 #include <lualib.h>
5 #include <lauxlib.h>
6 }

2.编译选项的不同

gcc -o xxx xxx.c -llua -ldl -lm

g++ -o xxx xxx.cpp -llua -ldl

 

下面是一个简单的C++调用Lua代码方法示例

lua代码(文件名为luafun.lua)

1 function add(x)
2     print('luafun,x=',x)
3 end

C++代码,这里注释部分说明了一些可替代的调用

 1 #include<iostream>
 2 using namespace std;
 3 
 4 extern "C"
 5 {
 6 #include"lua.h"
 7 #include"lauxlib.h"
 8 #include"lualib.h"
 9 }
10 
11 #define my_lua_dofile(L, filename) (luaL_loadfile((L), (filename)) || lua_pcall((L), 0, LUA_MULTRET, 0))
12 
13 lua_State *GlobalL;
14 
15 int main()
16 {
17     GlobalL = luaL_newstate();
18     int x = 10;
19 
20     lua_gc(GlobalL, LUA_GCSTOP, 0);
21     luaL_openlibs(GlobalL);
22     lua_gc(GlobalL, LUA_GCRESTART, 0);
23 
24     //luaL_dofile(GlobalL, "luafun.lua");//执行lua文件
25     
26     int loaderr = luaL_loadfile(GlobalL, "luafun.lua");
27     cout<<"loaderr="<<loaderr<<endl;
28     lua_pcall(GlobalL, 0, LUA_MULTRET, 0);
29     //my_lua_dofile(GlobalL, "luafun.lua");//代替上面三行
30 
31     lua_getfield(GlobalL, LUA_GLOBALSINDEX, "add");
32     //lua_getglobal(GlobalL, "add");//代替上面一行
33     
34     lua_pushnumber(GlobalL, x);//参数
35     int callerr = lua_pcall(GlobalL, 1, 0, 0);
36     cout<<"callerr="<<callerr<<endl;
37     cout<<lua_tostring(GlobalL, -1)<<endl;
38 
39     lua_close(GlobalL);
40 }

而实际上,直接这样用太过繁琐,因为要为每个lua函数单独写参数列表等内容,所以有不少人对此做了一些封装,可参考:http://blog.csdn.net/nightfallrove/article/details/5729636。另外g++编译的时候注意编译选项。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
**Lua内存增长问题优化发布时间:2022-07-22
下一篇:
distri.lua重写开源手游服务器框架Survive发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap