lua和C++的互動(1)

來源:互聯網
上載者:User

標籤: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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.