lua入门之二:c/c++ 调用lua及多个函数返回值的获取
2023-09-11 14:20:59 时间
当 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
执行结果:
相关文章
- C++数据成员
- C++ 表达式
- 【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器
- 【C/C++学院】(4)c++开篇/类和对象/命名空间/类型增强/三目运算符/const专题/引用专题/函数增强
- C++ 调用Python脚本
- C++入门笔记
- C语言/C++常见习题问答集锦(二十七)
- Open3D (C++) 计算点云的最大距离
- C++多线程基础入门
- 【华为OD机试 2023】 最大化控制资源成本(C++ Java JavaScript Python)
- C++ opencv入门学习
- python快速入门-有C++或java基础
- AI模型C++部署:ubuntu安装Cython并使用C/C++调用python动态库【附加c++与python互相调用算法demo程序接口的源码】
- 基础知识点-----C++使用固定命名空间
- 【跟学C++】C++类与对象—构造函数—析构函数(Study10)
- C++的学习心得和知识总结 第四章(完)
- Visual Studio 2015开发C++程序的基本使用-蔡军生-专题视频课程