C++调用LUA
来源:互联网 发布:deform材料数据库 编辑:程序博客网 时间:2024/06/08 09:09
Lua的C库提供一系列API:
* 管理全局变量
* 管理tables
* 调用函数
* 定义新函数, 这也可以完全由C实现
* 垃圾收集器Garbage collector, 虽然Lua可以自动进行, 但往往不是立即执行的,所以对实时性要求比较高的程序, 会自己调用垃圾收集器
* 载入并执行Lua程序, 这也可以由Lua自身实现
* 任何Lua可以实现的功能, 都可以通过Lua的C API实现, 这对于优化程序的运行速度有帮助. 经常调用的共用的Lua程序片断可以转成C程序, 以提高效率。
下面是c++调用LUA的简单例子
extern "C" {
#include "D:/program/lua-5.1.4/src/lua.h"
#include "D:/program/lua-5.1.4/src/lualib.h"
#include "D:/program/lua-5.1.4/src/lauxlib.h"
}
#pragma comment(lib,"D:/program/lua-5.1.4/bin/lua51.lib")
/* LUA接口声明*/
lua_State* L;
int main ( int argc, char *argv[] )
{
/* 初始化 Lua */
L = lua_open();
/*载入LUA库 */
luaL_openlibs(L);
/* 运行LUA脚本 */
luaL_dofile(L,"test.lua");
/* 清除 Lua */
lua_close(L);
return 0;
}
c++访问LUA变量
比如我们在脚本中有以下定义:
num=100
s="nv"
t={
age=10,
name="hua"
}
我们可以这样来取得一个变量的值:
lua_getglobal(L, "num"); ----获取数值
int var = lua_tonumber(L, -1);
lua_getglobal(L, "s"); ---- 获取字符串
std::string m_string=lua_tostring(L, -1);
lua_getglobal(L, "t"); -----获取table
lua_pushstring(L,"age");
lua_gettable(L,-2);
int age=lua_tonumber(L, -1);
lua_getglobal(L, "t"); -----获取table
lua_pushstring(L,"name");
lua_gettable(L,-2);
std::string name=lua_tostring(L, -1);
在程序中调用脚本的函数
假设你在脚本中定义了一个函数:
function main(number)
number = number + 1
return number
end
在Lua中,函数等同于变量,所以你可以这样来取得这个函数:
lua_getglobal(L, "main"); //函数现在栈顶。我们可以调用这个函数,并传递给它正确的参数
lua_pushnumber(L, 100); //将参数压栈
lua_pcall(L, 1, 1, 0); //调用函数,有一个参数,一个返回值
int result = lua_tonumber(L, -1); //返回值现在栈顶
- [Lua]C/C++调用Lua
- [lua]C调用lua函数
- C/C++ 调用 Lua
- c调用lua脚本
- Lua调用C函数
- C调用lua
- lua 调用c函数
- lua c/c++ 调用
- Lua调用C函数
- lua调用c函数
- Lua调用C函数
- c调用lua
- c 调用 lua
- c、c++调用lua
- c/c++ 调用lua
- lua调用C函数
- lua调用C函数
- lua调用C函数
- 我的java笔记(集合)
- 我要录视频-XML(一)
- 面向对象—在线文件管理模块
- flex父子页面数据交互实现(回调函数)
- gen文件无法生成
- C++调用LUA
- 我的程序员之路01
- Java内部类总结
- Objective-C一瞥
- java 定时器Timer的三种实现
- commsrc.pn生成伪码
- SQL之left join , right join, inner join
- 111
- 如何动态获得view的大小