通過c++調(diào)用lua 腳本,
環(huán)境VC++6.0
lua sdk 5.1
在調(diào)用前 先認(rèn)識幾個函數(shù)。
1. 調(diào)用lua_open()將創(chuàng)建一個指向Lua解釋器的指針。
2. luaL_openlibs()函數(shù)加載Lua庫。
3. 使用luaL_dofile()加載腳本并運行腳本。
4. lua_close()來關(guān)閉Lua指向解釋器的指針。
5. 調(diào)用lua_getglobal()將add()函數(shù)壓入棧頂,add()為lua函數(shù)。
6. 第一個參數(shù)x,通過調(diào)用lua_pushnumber()入棧。
7. 再次調(diào)用lua_pushnumber()將第二個參數(shù)入棧。
8. 使用lua_call()調(diào)用Lua函數(shù)。
9. 調(diào)用lua_tonumber()從棧頂取得函數(shù)的返回值。
10. lua_pop()移除棧頂?shù)闹怠?br>
代碼
add.lua
1
function add ( x, y )
2
return x + y
3
end
4
main.cpp
#include <stdio.h>


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


/**//* the Lua interpreter */
lua_State * L;

int luaadd ( int x, int y )


{
int sum;
//函數(shù)名
lua_getglobal(L, "add");
//第一個參數(shù)壓棧
lua_pushnumber(L, x);
//第二個參數(shù)壓棧
lua_pushnumber(L, y);

//調(diào)用函數(shù)
lua_call(L, 2, 1);
//得到返回值
sum = (int)lua_tonumber(L, -1);
lua_pop(L, 1);
return sum;
}

int main ( int argc, char *argv[] )


{
int sum;
//創(chuàng)建一個指向Lua解釋器的指針。
L = lua_open();
//函數(shù)加載Lua庫
luaL_openlibs(L);

//加載腳本
luaL_dofile(L,"add.lua");
//調(diào)用函數(shù)
sum = luaadd( 10, 11);
// print the result
printf( "The sum is %d\n", sum );
//關(guān)閉 釋放資源
lua_close(L);
return 0;
}

注意問題:
1.工程頭文件lua.h等,編譯器能找到,可以通過工具來設(shè)置頭文件路徑。
2. 添加lua5.1.lib到Object/library modules列表中。
測試結(jié)果
The sum is 21
關(guān)于lua的認(rèn)識
http://www.shnenglu.com/expter/archive/2008/12/24/70224.html