標籤:lua 不能 lob 關閉 就是 color 相對 glob mat
/*以前聽的一個故事,當年Java的創造者講課的時候,一開始先拿一個簡單的不能簡單的小例子,不斷的擴充,最後成為一個複雜而完美的程式。一個重要之重要的概念,就是棧。Lua與別的語言互動以及交換資料,是通過棧完成的。*/#include <iostream>using namespace std;extern "C" //這部分按C語言進行編譯而不是C++{ #include "lua.h" #include "lualib.h" #include "lauxlib.h"}class CLuaFn{public: CLuaFn(void); ~CLuaFn(void); void Init(); //初始化Lua對象指標參數 void Close(); //關閉Lua對象指標 bool LoadLuaFile(const char* pFileName); //載入指定的Lua檔案 bool CallFileFn(const char* pFunctionName, int nParam1, int nParam2); //執行指定Lua檔案中的函數private: lua_State* m_pState; //這個是Lua的State對象指標,一個lua檔案對應一個};void CLuaFn::Init(){ if(NULL == m_pState) { m_pState = lua_open(); //返回一個lua對象指標 luaL_openlibs(m_pState); //載入所有可能用到的Lua基本庫,比如載入lua的string庫,io庫,math庫等等等等 }}void CLuaFn:Close(){ if(NULL != m_pState) { lua_close(m_pState); //關閉lua對象並釋放指標 m_pState = NULL; }}/*載入指定的Lua檔案這裡要特別說明一下,因為Lua是指令碼語言,載入lua檔案本身的時候才會編譯所以在負載檔案的時候盡量放在程式的初始化中,因為當你執行luaL_dofile()函數的時候,Lua會啟用文法分析器,去分析你的指令碼文法是否符合Lua規則,如果你胡亂的傳一個檔案過去,Lua就會告訴你檔案語法錯誤,無法載入。如果你的Lua指令碼很大,函數很多,文法分析器會比較耗時,所以,載入的時候,盡量放在合適的地方,而且,對於一個Lua檔案而言,反覆載入luaL_dofile()除了會使你的CPU變熱沒有任何意義*/bool CLuaFn:LoadLuaFile(const char* pFileName){ int nRet = 0; if(m_pState == NULL) { return false; } nRet = luaL_dofile(m_pState, pFileName); if(nRet != 0) { //lua_tostring(m_pState,-1)-1取m_pState棧頂資料,即錯誤提示字串 (-1相對棧頂位置,1相對棧底的絕對位置) printf("CLuaFn::LoadLuaFile(%s) is file(%d)(%s)\n", pFileName, nRet, lua_tostring(m_pState,-1)); return false; } return true;}//執行指定Lua檔案中的函數bool CLuaFn:CallFileFn(const char*pFunctionName, int nParam1, int nParam2){ int nRet = 0; if(m_pState == NULL) { return false; } lua_getglobal(m_pState, pFunctionName); //驗證Lua函數是否在當前載入的Lua檔案中,並把指標指向這個函數位置 lua_pushnumber(m_pState, nParam1); //壓棧操作,把資料壓入資料棧 lua_pushnumber(m_pState, nParam2);}
lua和C++的互動(1)