• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

    当 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

执行结果:



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Lua的内存监测和回收发布时间:2022-07-22
下一篇:
《Lua程序设计》9.3以协同程序实现迭代器学习笔记发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap