您的位置:首页 > 编程语言 > Lua

C++调用Lua代码

2012-10-24 15:22 525 查看
这里是指linux下的调用。C与C++调用Lua略有不同,体现在:

1.头文件包含的方法

C中直接include

#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>


c++中要加extern "C"

extern "C"
{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
}


2.编译选项的不同

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

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

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

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

function add(x)
print('luafun,x=',x)
end


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

#include<iostream>
using namespace std;

extern "C"
{
#include"lua.h"
#include"lauxlib.h"
#include"lualib.h"
}

#define my_lua_dofile(L, filename) (luaL_loadfile((L), (filename)) || lua_pcall((L), 0, LUA_MULTRET, 0))

lua_State *GlobalL;

int main()
{
GlobalL = luaL_newstate();
int x = 10;

lua_gc(GlobalL, LUA_GCSTOP, 0);
luaL_openlibs(GlobalL);
lua_gc(GlobalL, LUA_GCRESTART, 0);

//luaL_dofile(GlobalL, "luafun.lua");//执行lua文件

int loaderr = luaL_loadfile(GlobalL, "luafun.lua");
cout<<"loaderr="<<loaderr<<endl;
lua_pcall(GlobalL, 0, LUA_MULTRET, 0);
//my_lua_dofile(GlobalL, "luafun.lua");//代替上面三行

lua_getfield(GlobalL, LUA_GLOBALSINDEX, "add");
//lua_getglobal(GlobalL, "add");//代替上面一行

lua_pushnumber(GlobalL, x);//参数
int callerr = lua_pcall(GlobalL, 1, 0, 0);
cout<<"callerr="<<callerr<<endl;
cout<<lua_tostring(GlobalL, -1)<<endl;

lua_close(GlobalL);
}


而实际上,直接这样用太过繁琐,因为要为每个lua函数单独写参数列表等内容,所以有不少人对此做了一些封装,可参考:http://blog.csdn.net/nightfallrove/article/details/5729636。另外g++编译的时候注意编译选项。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: