首页 > 代码库 > Lua初学者(三)--Lua 嵌入宿主语言(C++/C)
Lua初学者(三)--Lua 嵌入宿主语言(C++/C)
继续上节内容,在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>
test.lua 文件内容:
<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的动态库了。
(完)
Lua初学者(三)--Lua 嵌入宿主语言(C++/C)