博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua入门之二:c/c++ 调用lua及多个函数返回值的获取
阅读量:6855 次
发布时间:2019-06-26

本文共 1391 字,大约阅读时间需要 4 分钟。

    当 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 
//lua头文件#ifdef __cplusplusextern "C" {#include "lua.h" #include
#include
} #else#include
#include
#include
#endifint 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
执行结果:

你可能感兴趣的文章
ruby初级语法知识
查看>>
CA证书服务器(1) 数据加密技术
查看>>
Qt学习之路(23): 自定义事件
查看>>
如何让Windows 2003更加安全
查看>>
烂泥:使用Navicat for SQL Server新建数据库、用户及权限赋予
查看>>
采用hadoop对日志进行分布式分析框架
查看>>
服务器监控和虚拟机管理之六PRO的配置与实现
查看>>
【转】烂泥:查看MySql版本号命令
查看>>
MFC绘制直方图和饼图
查看>>
tf.minimize
查看>>
自己动手编写 IronPython IDE
查看>>
Eclipse:Eclipse平台技术概述
查看>>
OSSIM让网络攻击无所遁形
查看>>
word打开错误解决方法小笔记
查看>>
OSSIM(开源安全信息管理系统)在企业网络管理中的应用
查看>>
【Apache Mina2.0开发之一】搭建Apache Mina框架并实现Server与Client端消息传递
查看>>
Word 2003启动后如何彻底去掉缩略图
查看>>
Puppet实战-Puppet主机、模块、类、资源、变量、参数、标签命名规范
查看>>
技术总结:自动扩张WPF树型表格列宽
查看>>
使用wxWidgets for C++从资源文件中静态装载图像
查看>>