c/c++调用lua函数
来源:互联网 发布:淘宝自动发货软件离线 编辑:程序博客网 时间:2024/06/05 10:59
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;}
0 0
- [lua]C调用lua函数
- Lua调用C函数
- lua 调用c函数
- Lua调用C函数
- lua调用c函数
- Lua调用C函数
- lua调用C函数
- lua调用C函数
- lua调用C函数
- Lua调用C函数
- lua调用c函数
- lua调用C函数
- lua调用C函数
- Lua调用C函数
- lua 调用c函数
- Lua调用C函数
- Lua调用C函数
- lua调用C函数
- Python为什么要self
- Eclipse插件开发系列文章---序
- 打开谷歌浏览器提示输入密钥环
- vm+redhat联网
- Android环境的搭建
- c/c++调用lua函数
- String 值传递or引用传递
- 转帖多线程编程使用互斥锁同步线程
- 利用nat123端口映射快速发布网站做网站服务,解决80端口映射被屏蔽被封问题,及nat123端口映射分析
- oracle视图的创建
- ngui基类log
- C++设计模式——迭代器模式
- 关于VWmare用NAT上网的问题
- 为什么微软和比尔是值得大家尊敬的