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
运行结果:
当 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
运行结果:
![](http://www.linuxidc.com/upload/2014_09/14091910137918.png)
相关文章推荐
- lua入门之二:c/c++ 调用lua及多个函数返回值的获取
- lua入门之二:c/c++ 调用lua及多个函数返回值的获取
- lua入门之二:c/c++ 调用lua及多个函数返回值的获取
- 9.Lua调用c++函数获取返回值
- C++获取Lua全局变量和执行Lua多参数多返回值函数
- tolua 使用 Lua调用c++多返回值函数
- C++获取Lua全局变量和执行Lua多参数多返回值函数
- Lua的使用入门之C/C++与lua函数的混合调用
- C/C++中调用LUA函数
- C++保存和调用lua函数
- Lua与C/C++的交互5:C/C++调用Lua函数
- 如何在c/c++中调用LUA函数
- 从函数或方法返回内存 - C++快速入门35
- C++调用lua函数的一种通用办法
- 解决c++ 调用lua 方式! 避免重复写逻辑对应的lua 函数
- 子函数的调用与返回,主函数获取返回值,函数工作路径
- 从函数或方法返回内存 - C++快速入门35
- c++学习笔记之函数的调用和返回
- [第二节]C++ 引用 函数调用作为左值 用const限定引用 返回堆中变量的引用
- 通过 LuaBind 让 C++函数返回Lua表