导航

C++获取Lua全局变量和执行Lua多参数多返回值函数

Posted on 2015-08-04 10:34  ggzone  阅读(203)  评论(0编辑  收藏  举报

C++代码:

// LuaAndC.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


#include <iostream>  
#include <string.h>  
using namespace std;  
   
extern "C"  
{  
    #include "lua.h"  
    #include "lauxlib.h"  
    #include "lualib.h"  
}  


int _tmain(int argc, _TCHAR* argv[])
{
	 //1.创建一个state  
    lua_State *L = luaL_newstate();  
	
	luaL_openlibs(L);
	luaL_dofile(L,"Hello.lua");
	
	//运行脚本
	string strScript="print(\"Hello World From Script!\")";
	luaL_dostring(L,strScript.c_str(),"MyScript");
		
	//压栈
	lua_pushstring(L,"Hunter");
	lua_pop(L,1);
	
	//获取lua的全局变量
	lua_getglobal(L,"str");  //会将lua全局变量压入栈
	if(lua_isstring(L,1))
	{
		cout<<lua_tostring(L,1)<<endl;//不弹出栈
	}
	lua_pop(L,1);

	//准备lua全局函数的栈环境,参数是自左向右依次压栈
	lua_getglobal(L,"sayHello");
	lua_pushstring(L,"Hunter");
	lua_pushstring(L,"18");

	//Lua调用函数时,会自动将压入的参数弹出栈,只有返回值在栈中
	lua_call(L,2,2);

	//获取lua函数执行返回值,最后压入栈的返回值在栈顶
	cout<<lua_tostring(L,-2)<<endl;
	cout<<lua_tonumber(L,-1)<<endl;

	lua_pop(L,2);

    //4.关闭state  
    lua_close(L);  
	
	int i;
	cin>>i;
    return 0 ;  
}


 

Lua代码:

function sayHello(strName,iAge)
	print("Hello World "..str.." Age "..iAge)
	return "x"..str,iAge+2
end

str="Hello"