轉(zhuǎn):http://www.cnweblog.com/fly2700/archive/2010/02/09/282920.html
參考http://blog.csdn.net/kun1234567/archive/2007/12/11/1929815.aspx
第1步:下載
從官方主頁www.lua.org下載Lua源代碼,最新版本為5.1.3。(jack-wang注:現(xiàn)在已經(jīng)是5.1.4了)
解壓之后找到“[Lua]/src”文件夾,這里面就是Lua了,不過還不能直接使用。
第2步:編譯lua
使用任意ANSI C編譯器,在這里使用VS2005編譯LUA。具體步驟如下:
a.打開vs的命令行工具,工具-->visual studio 2005 command prompt
b.跳轉(zhuǎn)到[Lua]目錄,例如:cd D:/Program Files/Lua
c.執(zhí)行:etc\luavs.bat( 注意,是 \ 不是 /,寫錯了不能執(zhí)行編譯 )
d.然后lua51.dll, lua51.lib, lua.exe, and luac.exe就生成在 src 路徑下了
e.在windows環(huán)境變量中把[Lua]\src添加到系統(tǒng)Path中去,
第3步:創(chuàng)建lua腳本
下載LuaEdit http://luaforge.net/frs/download.php/1037/LuaEdit_2_5.zip 他是Lua腳本的編輯工具,還可以對Lua腳本進行語法檢測和調(diào)試。你也可以其他的純文本編輯工具寫一個文件test.lua,注意后面沒有“;”
function f ( x, y)
return x + y
end
第4步:在C++ 中調(diào)用Lua腳本
開啟VC++6.0環(huán)境創(chuàng)建一個新文件main.cpp
// Win32Console.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

extern "C"


{
#include "D:/Lib/Lua/lua.h"
#include "D:/Lib/Lua/lualib.h"
#include "D:/Lib/Lua/lauxlib.h"
}
#pragma comment( lib ,"D:/Lib/Lua/lua51.lib")
lua_State *L;

//調(diào)用lua
double fun( double x, double y )


{
double ret;
lua_getglobal( L, "add"); // 獲取全局變量f
lua_pushnumber( L,x); // 操作數(shù)壓棧
lua_pushnumber( L,y); // 操作數(shù)壓棧
lua_call( L, 2, 1); // 執(zhí)行:2個操作數(shù),1個返回值
//lua_pcall( L, 2, 1, 0); // 保護模式的lua_call,0為錯誤處理碼。具體應用暫時不明,在使用手冊中有粗略介紹
ret = lua_tonumber( L, -1); // 將棧頂元素轉(zhuǎn)換成數(shù)字并賦值給ret
lua_pop( L, 1); // 從棧中彈出一個元素
return ret;
}

//被lua調(diào)用的方法
static int average(lua_State *L2)


{

/**//* get number of arguments */
int n = lua_gettop(L2);
double sum = 0;
int i;

/**//* loop through each argument */
for (i = 1; i <= n; i++)

{

/**//* total the arguments */
sum += lua_tonumber(L2, i);
}
lua_pushnumber(L, sum / n);

/**//* push the sum */
lua_pushnumber(L, sum);

/**//* return the number of results */
printf("average called. [ok]\n");
return 2;
}
//==============================================
// Main Functions
//==============================================
int main( void)


{
int error;
L = lua_open(); // 創(chuàng)建Lua接口指針(借用DX的術語,本質(zhì)是個堆棧指針)
luaopen_base(L); // 加載Lua基本庫
luaL_openlibs(L); // 加載Lua通用擴展庫

/**//*
可能有的文章會采用以下寫法,手工控制加載哪些庫:
luaopen_table(L); // 加載table庫
luaopen_io(L); // 加載IO庫
luaopen_string(L); // 加載string庫
luaopen_math(L); // 加載math庫
經(jīng)過測試,luaopen_io(L);該句執(zhí)行異常,可能跟Lua的IO庫有關系。具體原因暫時沒有追究,將來如果有機會弄清楚,再回頭來闡述。
*/

/**//* load the script */
lua_register(L, "average", average);
error = luaL_dofile(L, "hellow.lua"); // 讀取Lua源文件到內(nèi)存編譯

double ret = fun( 10, 3.4); // 調(diào)用模版函數(shù)f
printf( "ret = %f\n", ret); // 輸出結果,C語言的東西,跟Lua無關
lua_close( L);
return 1;
}

創(chuàng)建一個hellow.lua文件和main.cpp放在一起,寫入以下內(nèi)容
function add ( x, y)
file = assert(io.open("data.txt", "w"))
file:write("abcde\n")
file:write("ok!\n")
file:close()

--DataDumper(1,2,3,4)
file = assert(io.open("data.txt", "r"))
str = file:read("*a")
io.write(str)
io.write("\n")
avg, sum = average(10, 200, 3000)
print("The average is ", avg)
print("The sum is ", sum)
return x + y
end
posted on 2011-09-29 02:34
小王 閱讀(5087)
評論(0) 編輯 收藏 引用 所屬分類:
游戲服務器端開發(fā)