码迷,mamicode.com
首页 > 编程语言 > 详细

Lua 跟 C++ 的交互

时间:2014-06-26 14:11:51      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:c++和lua交互   c++调用lua   lua调用c++   交互      

Lua 和 C++ 是这样交互的

乱七八糟的前戏:
1. 到官网下载 Lua 文件  可参考 ->   Lua 下载与配置
2. 设置环境  可参考  ->   VS 配置Lua环境


交互过程有:
1. C++ 访问 Lua 的变量
2. C++ 调用 Lua 的函数
3. Lua 访问 C++ 的变量
4. Lua 访问 C++ 的函数


No code say a j8


C++ 调用 Lua

#include <iostream>
#include <string>

// 引入Lua必要的头文件,Version: Lua5.1.5
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
};

using namespace std;

// C++ 调用 lua 
int main()
{
	//初始化全局L
	lua_State *L = luaL_newstate();

	//打开库
	luaL_openlibs(L);

	//加载lua脚本文件
	if (luaL_loadfile(L,"LuaFile\\lua.lua"))   // lua.lua 的路径,这里使用相对路径
	{
		printf("file load error\n");
	}

	lua_pcall(L,0,0,0);    // 加载 Lua 文件

	lua_getglobal(L, "l_str");  // get, 将L指向 lua文件中的函数 l_str 

	lua_pcall(L,0,1,0);		// 执行指针L指向的函数,将结果返回到栈顶, (0,1,0) 表示 (输入个数,输出个数,其他处理)

	string strVersion = luaL_checkstring(L,1);   // 从栈顶获取元素
	cout<<strVersion<<endl;
	
	lua_close(L);

	return 0;
}


/*************************************
Lua.lua

version = "Lua version: 5.1.5";
function l_str()
	return version;
end;


print("Load LuaFile Accomplish");

*************************************/


Lua 调用 C++

#include <iostream>
#include <string>

// 引入Lua必要的头文件,Version: Lua5.1.5
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
};

using namespace std;


// 将lua中的变量,通过这个函数打印出来
int c_Print(lua_State* L)	// 返回值为压入栈中元素的个数	
{
	// 从参数列表中,获取元素
	string strVersion = luaL_checkstring(L,1);

	cout<<strVersion<<endl;

	lua_pushstring(L, strVersion.c_str());		// 将 strVersion 压入栈,也可以不压

	return 1;    // 返回压入栈中元素的个数

}

// Lua 调用 C++ 的函数
int main()
{
	//初始化全局L
	lua_State *L = luaL_newstate();

	//打开库
	luaL_openlibs(L);

	//加载lua脚本文件
	if (luaL_loadfile(L,"LuaFile\\lua.lua"))   // lua.lua 的路径,这里使用相对路径
	{
		printf("file load error\n");
	}

	lua_pcall(L,0,0,0);    // 加载 Lua 文件

	lua_pushcfunction(L, c_Print);		// 将C++函数push进来
	lua_setglobal(L, "c_Print");		// 将C++函数进行注册,这样lua文件就能识别到了。 

	lua_getglobal(L, "l_Print");
	lua_pcall(L,0,0,0);			//  调用lua 中的 l_Print 函数

	
	lua_close(L);

	return 0;
}


/*************************************
Lua.lua


version = "Lua version: 5.1.5";
function l_Print()
c_Print(version);
end;


print("Load LuaFile Accomplish");


*************************************/

运行结果:

bubuko.com,布布扣


Lua 跟 C++ 的交互,布布扣,bubuko.com

Lua 跟 C++ 的交互

标签:c++和lua交互   c++调用lua   lua调用c++   交互      

原文地址:http://blog.csdn.net/core__code/article/details/34447273

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!