資源簡介
現在最新版本lua,lua-5.2.3。
代碼片段和文件信息
/************************************************************************/
/*?C/C++調用lua函數*/
/*?url?=?http://blog.csdn.net/pizi0475/article/details/5398497?*/
/************************************************************************/
#include?
#include?
#include?
#include?
extern?“C“
{
#include?“lua.h“
#include?“lualib.h“
#include?“lauxlib.h“
};
using?namespace?std;
/************************************************************************/
//函數功能:調用lua函數
//函數參數:
// L?lua虛擬機
// x?
// y
//函數返回:
// sum
//核心函數?lua_call()
/*
調用一個函數。
要調用一個函數請遵循以下協議:?首先,要調用的函數應該被壓入堆棧;?接著,把需要傳遞給這個函數的參數按正序壓棧;?
這是指第一個參數首先壓棧。?最后調用一下?lua_call;?nargs?是你壓入堆棧的參數個數。?當函數調用完畢后,所有的參數以及函數本身都會出棧。
而函數的返回值這時則被壓入堆棧。?返回值的個數將被調整為?nresults?個,?除非?nresults?被設置成?LUA_MULTRET。
在這種情況下,所有的返回值都被壓入堆棧中。?Lua?會保證返回值都放入棧空間中。
函數返回值將按正序壓棧(第一個返回值首先壓棧),?因此在調用結束后,最后一個返回值將被放在棧頂。
被調用函數內發生的錯誤將(通過?longjmp)一直上拋。
*/
/************************************************************************/
int?luaadd(lua_State?*L?int?x?int?y)
{
int?sum;
/*通過名字獲取Lua函數*/
lua_getglobal(L“add“);
/*向棧中壓入第一個參數*/
lua_pushnumber(Lx);
/*向棧中壓入第二個參數*/
lua_pushnumber(Ly);
/*調用函數*/
lua_call(L21);
/*得到結果
把給定索引處的?Lua?值轉換為?lua_Integer?這樣一個有符號整數類型。?
這個?Lua?值必須是一個數字或是一個可以轉換為數字的字符串否則,lua_tointeger?返回?0?。*/
sum?=?(int)lua_tointeger(L-1);
/*從堆棧中彈出?n?個元素*/
//n
lua_pop(L1);
return?sum;
}
int?main()
{
int?sum;
/*初始化lua虛擬機*/
lua_State?*L?=?luaL_newstate();
/*載入lua基本庫*/
luaL_openlibs(L);
/*載入腳本*/
luaL_dofile(L“./script/test.lua“);
/*調用lua函數*/
sum?=?luaadd(L1015);
/*顯示結果*/
cout<<“The?sum?=?“< /*清除lua虛擬機*/
lua_close(L);
/*顯示結果并暫停*/
cout<<“Press?enter?to?exit…“< getchar();
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2219??2014-08-27?09:06??main.cpp
?????目錄???????????0??2014-08-26?16:11??sc
?????文件??????????38??2014-08-26?16:11??sc
評論
共有 條評論