这里是指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++编译的时候注意编译选项。
原文链接: https://www.cnblogs.com/njucslzh/archive/2012/10/24/2737230.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/66843
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!