lua的入门教程-- C++(二)

简介:      在上一节中,讲述了如何产生一个lua的静态链接库,在这一节,将讲述简单使用lua5.1.lib的过程。      首先先建立一个新的win32 Console Application,在新工程里,为了美观,我将默认生成的文件夹删除,建立了include和src两个文件夹。在根目录下建立了三个文件夹:lib,script,include。              

     在上一节中,讲述了如何产生一个lua的静态链接库,在这一节,将讲述简单使用lua5.1.lib的过程。

     首先先建立一个新的win32 Console Application,在新工程里,为了美观,我将默认生成的文件夹删除,建立了include和src两个文件夹。在根目录下建立了三个文件夹:lib,script,include。

             

      将上节生成的lua5.1.lib放入lib文件夹,将lua源码中的lauxlib.h,lua.h,luaconf.h,lualib.h拷贝到include文件夹。

      在VS上,将根目录中include中的四个头文件加载到include中。在src中建立AMLua.h,AMLua.cpp,AMMain.cpp三个文件。

      

       下面在项目属性页进行一些必要设置,包含依赖项,库路径等。

        C/C++ -- General -- Additional Include Directories:..\include

        Linker -- General -- Additional Library Directories:..\lib

        Linker -- Input -- Additional Dependencies:lua5.1.lib

        另外,检查C/C++ -- General -- Code Generation -- Runtime Library,是否与第一节编译时所记录的Multi-threaded Debug Dll(/MDd)相同,如果不同,请修改成相同的模式。

        -----------------------------------------------分割线-----------------------------------------------

        使用lua的配置以及好了,下面开始写代码试试。

        首先写一个简单的脚本,在script文件夹中建立sample.lua,里边填上: 

function luaAdd(x, y)
     return x + y
end

        (吐槽下,居然没有lua的模板,只好使用C++的)

       在AMMain.cpp中填上以下代码:

<span style="font-size:18px;">#include <iostream>

extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
};

int main(int argc, char** argv)
{
	// 初始化一个栈 
	lua_State* L = luaL_newstate();

	// 加载lua库
	luaL_openlibs(L);

	// 加载lua文件
	luaL_dofile(L, "..\\script\\sample.lua");

	// 加载函数
	lua_getglobal(L, "luaAdd");

	// 传入参数
	lua_pushnumber(L, 20);
	lua_pushnumber(L, 40);

	// 调用函数,运行
	lua_pcall(L, 2, 1, 0);
	int nSum = 0;
	if(lua_isnumber(L, -1) == 1)
	{
		nSum = lua_tonumber(L, -1);
	}

	std::cout<< "The Sum:\t"<< nSum << std::endl;
	std::cout<< "please wait..." << std::endl;
	getchar();

	return 0;
}</span>

   运行查看结果:输出60;      

下面对AMMain.cpp进行修改,对lua提供的函数进行简单封装:

<span style="font-size:18px;">#include <iostream>

extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
};

lua_State* L;
int luaAdd(int x, int y);

int main(int argc, char** argv)
{
	// 初始化一个栈 
	L = luaL_newstate();

	// 加载lua库
	luaL_openlibs(L);

	// 加载lua文件
	luaL_dofile(L, "..\\script\\sample.lua");

	int nSum = luaAdd(20, 60);

	std::cout<< "The Sum:\t"<< nSum << std::endl;
	std::cout<< "please wait..." << std::endl;
	getchar();

	return 0;
}

int luaAdd(int x, int y)
{
	// 加载函数
	lua_getglobal(L, "luaAdd");

	// 传入参数
	lua_pushnumber(L, x);
	lua_pushnumber(L, y);

	// 调用函数,运行
	lua_pcall(L, 2, 1, 0);
	int nSum = 0;
	if(lua_isnumber(L, -1) == 1)
	{
		nSum = lua_tonumber(L, -1);
	}
	return nSum;
}</span>

       在本节展示了用在C++上调用lua脚本函数。在下一节,将介绍一个第三方库,我们现在C++上写函数,然后在lua中调用此函数,最后在C++中调用这个lua函数。(感觉挺绕的)

相关文章
|
4月前
|
编译器 C++ 开发者
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
287 1
|
4月前
|
C语言
Lua快速入门教程1
Lua快速入门教程1
52 2
|
4月前
|
程序员 编译器 C语言
最新Dev-C++下载安装以及C语言环境搭建教程(含C语言入门教程)
最新Dev-C++下载安装以及C语言环境搭建教程(含C语言入门教程)
591 0
|
11月前
|
存储 C++
软件开发入门教程网之C++ 常量
软件开发入门教程网之C++ 常量
|
11月前
|
数据采集 搜索推荐 网络安全
软件开发入门教程网之软件开发入门教程网之C++ 常量
软件开发入门教程网之软件开发入门教程网之C++ 常量
40 0
|
11月前
|
并行计算 程序员 C++
软件开发入门教程网 Search之C++ 简介
软件开发入门教程网 Search之C++ 简介
|
3月前
|
自然语言处理 编译器 C语言
C++语言入门教程
C++语言入门教程
|
4月前
|
Ubuntu 编译器 C++
【Conan 入门教程 】在Ubuntu上使用Conan编译C++第三方库:一站式解决方案
【Conan 入门教程 】在Ubuntu上使用Conan编译C++第三方库:一站式解决方案
1332 1
|
11月前
|
存储 C++
软件开发入门教程网之C++ 常量
软件开发入门教程网之C++ 常量
38 0
|
4月前
|
安全 程序员 C++
软件开发入门教程网之C++ 引用
软件开发入门教程网之C++ 引用