继续上节内容,在C中使用Lua,这个网上资源也比较多了,不过我这里也提下哈,毕竟自己过一遍还是很有好处的。
环境:Lua5.1,vs2013中文版
----------------------------------------------------一、C++中配置 lua----------------------------------------
1.下载lua源码么:http://www.lua.org/download.html
就OK了
2.打开VS2013,新建工程: 新建-->项目==》Win32控制台应用程序(起名:lua5.1)-->下一步-->①.选择:静态库;②.取消:预编译头-->完成
3.添加Lua的资源文件,生成静态库。
①.项目-->添加现有项(Shift+Alt+A);
②.选择 lua-5.2.3.tar.gz 最终解压包下 Src 目录下全部文件,点击 -->添加
(添加后会出现 三角)
4.完成后编译即可。
最终生成文件:
如果是 Release 模式下编译:(解决方案目录)/Release/lua.lib
若在 Debug模式下编译: (解决方案目录)/Debug/lua.lib
提示:会遇到的错误
1. 错误 1 error C4996: ‘sprintf‘: This function or variable may be unsafe. Cons
方法一:手工将原来的旧函数替换成新的Security CRT functions。
方法二:屏蔽这个警告。
在预编译头文件stdafx.h里(注意:一定要在没有include任何头文件之前)定义下面的宏:
#define _CRT_SECURE_NO_DEPRECATE
或者#param warning(disable:4996)
方法二没有使用新的更安全的CRT函数,显然不是一个值得推荐的方法,可是你又不想一个一个地改。
那么还有一个更方便的方法:
在预编译头文件stdafx.h里(同样要在没有include任何头文件之前)定义下面的宏:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
在链接的时候便会自动将旧函数替换成Security CRT functions。
注意:这个方法虽然使用了新的函数,但是不能消除警告你还得同时使用方法二。。。
详细解释:http://blog.csdn.net/popppig/article/details/8571075
----------------------------------------------------二、C++中如何调用 lua----------------------------------------
1.新建项目:
新建-->项目==》Win32控制台应用程序(起名:Luatest)-->下一步--> 完成 (完成即可)
2.设置属性:
项目-->属性==》 配置属性下:
①.VC++目录-->应用目录
在这里添加 上面 Lua5.1 工程生成的lib文件的文件目录,绝对路径就可以了。(懒人操作)
②.C/C++ -->常规 -->附加包含目录
这里添加 lua-5.2.3.tar.gz 最终解压包下 Src 的目录
③.C/C++ -->高级
选择 编译为C代码
3.设置完毕了,可以撸代码了:
先看看 lua.hpp,以后引用这个文件就OK,不必写下面那么多东西了
<span style="font-family:Arial;font-size:18px;">// lua.hpp
// Lua header files for C++
// <<extern "C">> not supplied automatically because Lua also compiles as C++
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
</span>
<span style="font-family:Arial;font-size:18px;">print "The test.lua has open !" print "hello world !" print "文件加载完毕 !" test = "我是 test 变量!" </span>这里要是正文了,咱们的Cpp文件:
/**
* 函数名:Func
* 作者:猪猪侠
* 日期:2014年11月12日 20:46:21
**/
// Luatest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include "lua.hpp"
/**
* 等价于:
* extern "C" {
* #include "lua.h"
* #include "lualib.h"
* #include "lauxlib.h"
* }
**/
int _tmain(int argc, _TCHAR* argv[])
{
//新建虚拟机
lua_State *L = luaL_newstate();
//载入库
luaL_openlibs(L);
//这里直接在C++里执行下 lua 代码
const char *buf = "print('Hello World')";
luaL_dostring(L, buf);
//这里执行 test.lua Lua文件
luaL_dofile(L, "test.lua");
//获取 返回结果
lua_getglobal(L,"test");
printf("\n%s\n", lua_tostring(L, -1));
//一定记得关闭虚拟机
lua_close(L);
system("pause");
return 0;
}
4.编译运行一下,
不是咱们的效果,因为没有执行 test.lua文件内容,
打开Debug文件夹,这里执行下:
OK! 我就不用解释了吧。
直接把 Luatest.exe 和test.lua 复制到任何地方,双击可以运行了,也就是说,不需要在使用Lua的动态库了。
(完)
原文地址:http://blog.csdn.net/zhuzhuyule/article/details/41050971