首页 > 代码库 > Lua 跟 C++ 的交互

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");


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

运行结果: