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

Lua入门之二:C/C++ 调用Lua及多个函数返回值的获取

2016-10-12 11:37 811 查看
转载自:http://www.linuxidc.com/Linux/2014-09/106906.htm

当 Lua 调用 C 函数的时候,使用和 C 调用 Lua 相同类型的栈来交互。C 函数从栈中获取她的参数,调用结束后将返回结果放到栈中。为了区分返回结果和栈中的其他的值,每个 C 函数还会返回结果的个数(the  function  returns  (in  C)  the  number  of  results  it  is leaving on the stack.)。

// luacallcpp.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <stdio.h>

//lua头文件

#ifdef __cplusplus

extern "C" {

#include "lua.h"  

#include <lauxlib.h>  

#include <lualib.h>  

}  

#else

#include <lua.h>

#include <lualib.h>

#include <lauxlib.h>

#endif

 

int static add(lua_State* L)

{

 //获取第一个参数

 double x=lua_tonumber(L,1);

 double y=lua_tonumber(L,2);

 //返回值压栈,压入两个返回值

 lua_pushnumber(L,x+y);

 lua_pushnumber(L,1000);

 //返回值的个数,

 return 2;

}

int _tmain(int argc, _TCHAR* argv[])

{

 

 

 lua_State * L=NULL;

 /* 初始化 Lua */  

 L = lua_open(); 

 /* 载入Lua基本库 */  

 luaL_openlibs(L); 

 /* 运行脚本 */  

 luaL_dofile(L, "./script/func.lua"); 

 //函数入栈

 lua_pushcfunction(L,add);

 //设置全局函数名

 lua_setglobal(L,"Add");

 //调用lua函数LUACALLCPP来反调cpp中的add

 lua_getglobal(L,"LUACALLCPP");

 lua_pushnumber(L,10);

 lua_pushnumber(L,34.33);

 //两个参数,两个返回值

 lua_pcall(L,2,2,0);

 //取返回值二

 printf("lua call cpp return val is %f \n",lua_tonumber(L,-1));

 //取返回值一

 printf("lua call cpp return val is %f \n",lua_tonumber(L,-2));

 

 /* 清除Lua */  

 lua_close(L); 

 return 0;

}

---------------------------------------

--region *.lua

--Date

--此文件由[BabeLua]插件自动生成

print("func.lua hava been loaded")

function LUACALLCPP(x,y)

-- 调用c++中的函数

return Add(x,y)

--print(Add(x,y))

end

 

--endregion

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: