C++调用Lua
2015-04-09 09:07
316 查看
一、编译得到Lua官方的lib(参见《编译Lua》一文)
二、新建C++空项目
![](http://img.blog.csdn.net/20150409092457558?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWW9uZ1l1X0lU/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
三、添加对Lua的头文件和lib的引用
1、把官方Lua提供的头文件整理在一起,添加对这些头文件的引用
![](http://img.blog.csdn.net/20150409092553718?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWW9uZ1l1X0lU/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20150409092530337?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWW9uZ1l1X0lU/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
四、添加对lib的引用
![](http://img.blog.csdn.net/20150409092659285?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWW9uZ1l1X0lU/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20150409092748410?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWW9uZ1l1X0lU/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3、编写源代码,Lua代码。并将Lua文件放在源代码同级目录下
![](http://img.blog.csdn.net/20150409093501719?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWW9uZ1l1X0lU/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
test.cpp文件:
#include <stdio.h>
//使用lib必须需要提供头文件。lib有包含源代码的方式有两种:
//一种是直接包含源代码本身,这种lib称之为静态链接库static link library。
//一种是指出包含源代码的dll位置。这种lib称之为动态链接库dynamic link library;
//本文用的是静态链接库static link library
extern "C"{
#include "lua.h"
#include "lualib.h"
#include "luaxlib.h"
};
//指向Lua解释器的指针,Lua代码是靠Lua解释器执行的
lua_State *L;
int luaAdd(int x, int y)
{
int sum;
//在解释器的代码文件中查找名为add的全局函数
lua_getglobal(L, "add");
//为函数输入参数
lua_pushnumber(L, x);
lua_pushnumber(L, y);
//调用Lua函数,并指明此函数有两个输入函数,两个输出函数
lua_call(L, 2, 1);
//获取解释器值栈的栈顶值
sum = (int)lua_tonumber(L, -1);
//将栈顶弹出
lua_pop(L, 1);
return sum;
}
int main(int argc, char *argv[])
{
int sum = 0;
//初始化Lua解释器
L = luaL_newstate();
luaopen_base(L);
//将Lua基本库载入解释器
luaL_openlibs(L);
//将Lua脚本载入解释器
luaL_loadfile(L, "add.lua");
//对解释器进行参数设置
lua_pcall(L, 0, LUA_MULTRET, 0);
//调用Lua函数
sum = luaAdd(10, 15);
printf("The sum is %d\n", sum);
//关闭Lua解释器
lua_close(L);
return 0;
}
五、运行结果:
二、新建C++空项目
三、添加对Lua的头文件和lib的引用
1、把官方Lua提供的头文件整理在一起,添加对这些头文件的引用
四、添加对lib的引用
3、编写源代码,Lua代码。并将Lua文件放在源代码同级目录下
test.cpp文件:
#include <stdio.h>
//使用lib必须需要提供头文件。lib有包含源代码的方式有两种:
//一种是直接包含源代码本身,这种lib称之为静态链接库static link library。
//一种是指出包含源代码的dll位置。这种lib称之为动态链接库dynamic link library;
//本文用的是静态链接库static link library
extern "C"{
#include "lua.h"
#include "lualib.h"
#include "luaxlib.h"
};
//指向Lua解释器的指针,Lua代码是靠Lua解释器执行的
lua_State *L;
int luaAdd(int x, int y)
{
int sum;
//在解释器的代码文件中查找名为add的全局函数
lua_getglobal(L, "add");
//为函数输入参数
lua_pushnumber(L, x);
lua_pushnumber(L, y);
//调用Lua函数,并指明此函数有两个输入函数,两个输出函数
lua_call(L, 2, 1);
//获取解释器值栈的栈顶值
sum = (int)lua_tonumber(L, -1);
//将栈顶弹出
lua_pop(L, 1);
return sum;
}
int main(int argc, char *argv[])
{
int sum = 0;
//初始化Lua解释器
L = luaL_newstate();
luaopen_base(L);
//将Lua基本库载入解释器
luaL_openlibs(L);
//将Lua脚本载入解释器
luaL_loadfile(L, "add.lua");
//对解释器进行参数设置
lua_pcall(L, 0, LUA_MULTRET, 0);
//调用Lua函数
sum = luaAdd(10, 15);
printf("The sum is %d\n", sum);
//关闭Lua解释器
lua_close(L);
return 0;
}
五、运行结果:
相关文章推荐
- 使用C++调用 LUA 函数收藏
- lua和c/c++互相调用实例分析(转)
- C++调用lua
- Lua与C/C++交互——Lua调用C/C++
- 在C/C++如何调用Lua
- 在Lua中调用C++函数
- 用SWIG实现C++和Lua互相调用实例
- lua脚本调用C++动态库中的函数
- lua和c++相互调用
- lua 与 c++ 的相互调用
- 将C++对象导出到lua,C++和lua的相互调用
- C++调用Lua脚本
- 在Lua中调用c++函数示例
- C++保存和调用lua函数
- Lua与C++交互调用(1)
- C/C++中调用LUA函数
- 让 lua 调用 C++ 中的 member functions
- C/C++调用lua脚本函数
- lua学习(三)--------lua调用c++函数和简单的错误处理
- C++调用lua编译报错