C++調用Lua代碼


這里是指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++編譯的時候注意編譯選項。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM