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

c/c++调用lua函数

2014-01-24 23:21 555 查看
lua环境由所有可操作的数据构成,编译好的函数,变量以及其他运行时内存。而所有的这些数据都将保存一个叫做lua_State的结构中。一个lua程序至少有个个lua_State,被称作lua环境,是用来发送和接收数据的地方,支撑着与其他语言的交互,具体来说就是利用lua栈(lua_Stack)来实现。

在c/c++中调用函数,具体过程可以分为几步:

1、新建一个lua环境并初始化或者已拥有lua_State

2、加载相应的程序库

3、加载执行lua文件

4、查询要执行的函数,通过函数名

5、参数入栈

6、设定参数个数,返回值个数,执行函数

7、从lua栈中提取并处理返回值。

源代码:

lua文件:

--测试vs2010下lua库配置

function add( a, b )
return (a+b)
end


c++文件:

//测试lua开发库
//1.新建一个lua_state 并初始化环境
//2.加载相关lua程序库
//3.加载执行lua文件
//4.查询要执行的函数,参数入栈
//5.执行函数
//6.从lua栈中提取返回值

#include <iostream>

extern "C" //采用c编译方式
{

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

}

using namespace std;

int main()
{
//初始化lua环境,加载了5.1版本的所有程序库
lua_State* L = lua_open();
luaL_openlibs( L );//分开加载库是io库有个bug听说

/*::luaopen_base( L );
::luaopen_io( L );
::luaopen_debug( L );
::luaopen_math( L );
::luaopen_os( L );
::luaopen_package( L );
::luaopen_string( L );
::luaopen_table( L );*/

luaL_dofile( L, "test.lua" ); //执行配置文件
int a = 1;
int b = 2;
lua_getglobal( L, "add" ); //查询函数
lua_pushnumber( L, a ); //参数压栈
lua_pushnumber( L, b );

if( lua_pcall( L, 2, 1, 0 ) != 0 ) //错误检测
{
cout <<"error running function add:" <<lua_tostring( L, -1 ) <<endl;
}

if( !lua_isnumber( L, -1 ) ) //检查返回值是否为数值
{
cout <<"add 必须返回一个数值" <<endl;
}

int c = lua_tonumber( L, -1 );
lua_pop( L, 1 ); //从栈中弹出返回值

cout <<"a + b = " <<c <<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: