zoukankan      html  css  js  c++  java
  • lua入门之二:c/c++ 调用lua及多个函数返回值的获取

        当 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 
    ",lua_tonumber(L,-1));
    	//取返回值一
    	printf("lua call cpp return val is %f 
    ",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
    

    执行结果:


  • 相关阅读:
    小甲鱼与客服的对话,代码与解析
    (role,line_spoken) = each_line.split(':',2) 小甲鱼python 一个任务
    python open() 方法 No such file or directory: 应该怎么解决
    并发编程
    并发编程
    并发编程
    并发编程
    并发编程
    并发编程
    并发编程
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5357031.html
Copyright © 2011-2022 走看看