c/c++调用lua函数

2014-11-24 08:25:49 · 作者: · 浏览: 0

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 
  
   

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

#include 
   
     #include 
    
      #include 
     
       } 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:" <
       
         
       
<script type="text/java script">BAIDU_CLB_fillSlot("771048");
点击复制链接 与好友分享! 回本站首页
<script> function copyToClipBoard(){ var clipBoardContent=document.title + '\r\n' + document.location; clipBoardContent+='\r\n'; window.clipboardData.setData("Text",clipBoardContent); alert("恭喜您!复制成功"); }
分享到: 更多
<script type="text/java script" id="bdshare_js" data="type=tools&uid=12732"> <script type="text/java script" id="bdshell_js"> <script type="text/java script"> var bds_config = {'snsKey':{'tsina':'2386826374','tqq':'5e544a8fdea646c5a5f3967871346eb8'}}; document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js cdnversion=" + Math.ceil(new Date()/3600000)