1. 程式人生 > >Lua與C++互動--lua c api用法--02

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

L,const chars); void lua_pushuserdata(Lua_StateL,void*p); 從棧取值

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; }