Lua與C++互動--lua c api用法--02
1 引入lua 中標頭檔案
extern “C” {
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
} 2 lua中常用的API
1 lua 與 C++互動主要是通過lua中的虛擬棧來實現
2 當c想要獲取lua中的資料,需要在lua中將資料加入棧中,c通過棧來獲取值
入棧函式
void lua_pushnil(Lua_State L);
void lua_pushboolean(Lua_State L,int bool);
void lua_pushnumber(Lua_State L,double n);
void lua_pushstring(Lua_State
bool lua_toboolean(Lua_StateL,int idx); int lua_tonumber(Lua_StateL,int idx); const char* lua_tostring(Lua_StateL,int idx,size_t len); void lua_touserdata(Lua_StateL,int idx); 檢測指定型別
int lua_gettop(luaState *L); void lua_settop(luaState *L,int idx); void lua_pushvalue(luaState *L,int idx); void lua_remove(luaState *L,int idx); void lua_insert(luaState *L,int idx); void lua_replace(luaState *L,int idx); 當C和Lua互相呼叫的時候,Lua虛擬棧嚴格的按照LIFO規則操作,只會改變棧頂部分。但通過Lua的API,可以查詢棧上的任何元素,甚至是在任何一個位置插入和刪除元素。
需要注意堆疊的順序
3 建立lua狀態機和開啟相關庫
lua_State *L = luaL_newstate();//建立lua狀態機 luaopen_base(L);//開啟基礎庫 luaL_openlibs(L);//開啟高階庫如IO,string,math,table lua_close(L);//關閉狀態機 4 向狀態機中壓入資料和讀取資料
lua_pushstring(L,“i am test lua && lua”); lua_pushnumber(L,19); if (lua_isstring(L, 1)) { cout << lua_tostring(L,1)<<endl; } if (lua_isnumber(L, 2)) { cout << lua_tonumber(L,2)<<endl; }