繼續上節内容,在C中使用Lua,這個網上資源也比較多了,不過我這裡也提下哈,畢竟自己過一遍還是很有好處的。
環境:Lua5.1,vs2013中文版
----------------------------------------------------一、C++中配置 lua----------------------------------------
1.下載下傳lua源碼麼:http://www.lua.org/download.html
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90TUaNnVYVWMo1WZxgWblZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zNyMzM1kjMxIjMxETM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
就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的動态庫了。
(完)