婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 淺析C\C++和Lua的通信方式

淺析C\C++和Lua的通信方式

熱門標簽:開通400電話申請流程 400手機電話免費辦理 如何利用高德地圖標注家 百度地圖標注位置網站 電腦外呼系統輻射大嗎 武漢百應人工智能電銷機器人 智能語音電銷的機器人 上海企業外呼系統排名 揚州電銷外呼系統軟件

為了實現Lua和其他語言之間的通信,Lua虛擬機為C\C++提供了兩個特性:

一,Lua_State狀態機

       lua_State主要是管理一個lua虛擬機的執行環境, 一個lua虛擬機可以有多個執行環境。Lua虛擬機通過維護這樣一個虛擬棧來實現兩種之間的通信,lua_State定義如下:

struct lua_State {
 CommonHeader;
 lu_byte status;
 StkId top; /* first free slot in the stack */
 global_State *l_G;
 CallInfo *ci; /* call info for current function */
 const Instruction *oldpc; /* last pc traced */
 StkId stack_last; /* last free slot in the stack */
 StkId stack; /* stack base */
 int stacksize;
 unsigned short nny; /* number of non-yieldable calls in stack */
 unsigned short nCcalls; /* number of nested C calls */
 lu_byte hookmask;
 lu_byte allowhook;
 int basehookcount;
 int hookcount;
 lua_Hook hook;
 GCObject *openupval; /* list of open upvalues in this stack */
 GCObject *gclist;
 struct lua_longjmp *errorJmp; /* current error recover point */
 ptrdiff_t errfunc; /* current error handling function (stack index) */
 CallInfo base_ci; /* CallInfo for first level (C calling Lua) */
};

        1,虛擬棧的管理, 包括管理整個棧和當前函數使用的棧的情況

        2,CallInfo的管理, 包括管理整個CallInfo數組和當前函數的CallInfo

        3,hook相關的, 包括hookmask, hookcount, hook函數等

        4,global_State是全局唯一的,存放多個lua_State之間的一些共享數據

        5,gc的一些管理和當前棧中upvalue的管理

        6,錯誤處理的支持等等

        C\C++和Lua擁有不同的數據類型,要實現兩者之間的數據通信怎么辦?Lua虛擬機提供Lua_State這樣一種數據結構。任何一種數據從C\C++傳入Lua虛擬機中,Lua都會將這類數據轉換為一種通用的結構lua_TValue,并且將數據復制一份,將其壓入虛擬棧中。lua_TValue定義如下:

struct lua_TValue {
 TValuefields;
};
 
#define TValuefields \

  union { struct { Value v__; int tt__; } i; double d__; } u
 
union Value {
 GCObject *gc;  /* collectable objects */
 void *p;     /* light userdata */
 int b;      /* booleans */
 lua_CFunction f; /* light C functions */
 numfield     /* numbers */
};

       Lua有自己的GC,C\C++由自己申請和釋放內存,所以兩者之間的內存管理是獨立的。從C\C++中傳遞數據到Lua虛擬機會發生數據拷貝,從Lua虛擬機中傳遞出來是直接從虛擬棧中取值或者地址,所以數據從虛擬棧中pop之后,是否依然是有效引用需要額外注意。

 二,C API

Lua腳本實現交互提供了一系列的C API,常用API有:

        luaL_newstate函數用于初始化一個lua_State實例

        luaL_openlibs函數用于打開Lua中的所有標準庫,如io庫、string庫等。

        luaL_loadbuffer編譯了buff中的Lua代碼,如果沒有錯誤,則返回0,同時將編譯后的程序塊壓入虛擬棧中。

        lua_pcall函數會將程序塊從棧中彈出,并在保護模式下運行該程序塊。執行成功返回0,否則將錯誤信息壓入棧中。

        lua_tostring函數中的-1,表示棧頂的索引值,棧底的索引值為1,以此類推。該函數將返回棧頂的錯誤信息,但是不會將其從棧中彈出。

        lua_pop是一個宏,用于從虛擬棧中彈出指定數量的元素,這里的1表示僅彈出棧頂的元素。

        lua_close用于釋放狀態指針所引用的資源。

入棧操作:

        Lua針對每種C類型,都有一個C API函數與之對應,如:

        void lua_pushnil(lua_State* L);  --nil值

        void lua_pushboolean(lua_State* L, int b); --布爾值

        void lua_pushnumber(lua_State* L, lua_Number n); --浮點數

        void lua_pushinteger(lua_State* L, lua_Integer n);  --整型

        void lua_pushlstring(lua_State* L, const char* s, size_t len); --指定長度的內存數據

        void lua_pushstring(lua_State* L, const char* s);  --以零結尾的字符串,其長度可由strlen得出。

出棧操作:

        API使用“索引”來引用棧中的元素,第一個壓入棧的為1,第二個為2,依此類推。我們也可以使用負數作為索引值,其中-1表示為棧頂元素,-2為棧頂下面的元素,同樣依此類推。

        Lua提供了一組特定的函數用于檢查返回元素的類型,如:

        int lua_isboolean (lua_State *L, int index);

        int lua_iscfunction (lua_State *L, int index);

        int lua_isfunction (lua_State *L, int index);

        int lua_isnil (lua_State *L, int index);

        int lua_islightuserdata (lua_State *L, int index);

        int lua_isnumber (lua_State *L, int index);

        int lua_isstring (lua_State *L, int index);

        int lua_istable (lua_State *L, int index);

        int lua_isuserdata (lua_State *L, int index);

        以上函數,成功返回1,否則返回0。需要特別指出的是,對于lua_isnumber而言,不會檢查值是否為數字類型,而是檢查值是否能轉換為數字類型。

如有任何疑問和建議,歡迎指出討論,謝謝~

您可能感興趣的文章:
  • C++廣播通信實例
  • Lua和C++的通信流程代碼實例
  • 深入分析Visual C++進行串口通信編程的詳解
  • C++線程間的互斥和通信場景分析

標簽:黑龍江 張掖 新余 嘉峪關 延邊 武漢 宜賓 江西

巨人網絡通訊聲明:本文標題《淺析C\C++和Lua的通信方式》,本文關鍵詞  淺析,C++,和,Lua,的,通信,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺析C\C++和Lua的通信方式》相關的同類信息!
  • 本頁收集關于淺析C\C++和Lua的通信方式的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品538一区二区在线| 亚洲色图欧美偷拍| 亚洲成人第一页| 日韩视频在线观看一区二区| 国产69精品一区二区亚洲孕妇| 美腿丝袜亚洲综合| 日韩欧美在线影院| 天堂av在线一区| 精品久久久三级丝袜| 国产一区二区三区精品欧美日韩一区二区三区 | 91丨porny丨国产| 欧美日韩国产系列| 免费一区二区视频| 久久久久国色av免费看影院| 丝瓜av网站精品一区二区| 欧美日韩精品三区| 国产一区日韩二区欧美三区| 日韩av午夜在线观看| 欧美精品乱人伦久久久久久| 国产亚洲精品超碰| 欧美日本不卡视频| 奇米色一区二区| 日本欧美韩国一区三区| 处破女av一区二区| 久久久99久久| 国产一区二区调教| 五月天网站亚洲| 国产精品久久午夜夜伦鲁鲁| 欧美成人aa大片| 欧美无乱码久久久免费午夜一区 | 亚洲综合网站在线观看| 综合电影一区二区三区 | 精品视频在线视频| 91免费小视频| 欧美日韩一区二区在线观看视频| 91一区二区在线观看| 国产福利精品导航| 一本色道久久综合亚洲91| 99久久精品免费看| 成人av网站免费| 欧美性猛片xxxx免费看久爱| 在线观看中文字幕不卡| 91视频国产资源| 福利一区在线观看| 91污片在线观看| 一本色道久久综合精品竹菊| 色综合色狠狠天天综合色| eeuss影院一区二区三区| 粉嫩蜜臀av国产精品网站| 国产成人精品免费网站| 日韩精品一区二区三区老鸭窝| 91视频国产资源| 在线精品亚洲一区二区不卡| 日韩亚洲欧美综合| 精品国产1区2区3区| 久久蜜桃香蕉精品一区二区三区| 午夜a成v人精品| 国产中文字幕一区| 国产91精品欧美| 成人夜色视频网站在线观看| 成人一区二区三区视频在线观看| 成人综合日日夜夜| 色哟哟日韩精品| 久久久久久久精| 亚洲欧洲三级电影| 天天免费综合色| av电影一区二区| 欧美日韩一区二区三区视频| 日韩欧美成人激情| 亚洲精品成人精品456| 午夜视频一区二区三区| 麻豆精品新av中文字幕| 欧美日韩aaaaaa| 久久久国产精品午夜一区ai换脸| 亚洲精品成人天堂一二三| 国产91在线看| 欧美日韩一区二区三区不卡| 久久一夜天堂av一区二区三区| 亚洲18影院在线观看| 国产乱子轮精品视频| 91蜜桃婷婷狠狠久久综合9色| 久久先锋影音av鲁色资源网| 亚洲综合视频在线| 久久er99精品| 日韩美女视频在线| 亚洲欧美日韩中文字幕一区二区三区| 日韩成人dvd| 9191成人精品久久| 日韩毛片在线免费观看| 九一久久久久久| 精品国产一区二区在线观看| 一区二区在线观看视频 | 91小宝寻花一区二区三区| 日韩欧美国产一区二区三区| 国产精品久久久99| 成人亚洲一区二区一| 久久综合色天天久久综合图片| 亚洲女与黑人做爰| 成人免费视频caoporn| 欧美精品一区二区蜜臀亚洲| 亚洲黄色av一区| 欧美性视频一区二区三区| 中文字幕一区二区不卡 | 国产成人一区二区精品非洲| 欧美日韩美少妇| 国产欧美精品一区二区色综合朱莉| 青青草原综合久久大伊人精品优势| 91丨九色丨蝌蚪富婆spa| 91精品国产综合久久福利| 美女一区二区三区在线观看| 在线电影国产精品| 亚洲成人先锋电影| 欧美肥胖老妇做爰| 亚洲综合男人的天堂| 国产一区二区三区香蕉| 国产视频亚洲色图| 国内精品久久久久影院色| 欧美一区二区播放| 国产91丝袜在线播放0| 久久久久久亚洲综合| 久久99久久99精品免视看婷婷| 久久一区二区三区四区| 国产自产视频一区二区三区| 精品国产区一区| 色综合天天综合给合国产| 日韩一区欧美一区| 91免费看`日韩一区二区| 视频一区二区国产| 日韩午夜在线观看| 欧美白人最猛性xxxxx69交| 欧美日韩一区二区在线观看视频| 国产精品香蕉一区二区三区| 国产一区二区三区免费| 精品亚洲porn| 成人午夜精品在线| 粗大黑人巨茎大战欧美成人| 久久er99热精品一区二区| 国产精品中文有码| 成人激情视频网站| 4438成人网| 国产精品久久久久一区| 亚洲欧美另类小说视频| 精品国产免费视频| 一区二区三区日韩欧美| 亚洲国产欧美日韩另类综合| 国产九色sp调教91| 国产一区二区在线观看免费| 国产福利一区二区三区视频| 韩国av一区二区| 石原莉奈一区二区三区在线观看| 青青草原综合久久大伊人精品优势| 久久精品国产亚洲a| 国产精品热久久久久夜色精品三区| 日韩一级片网站| 亚洲电影一级片| 在线看国产一区二区| 蜜臀av国产精品久久久久| 亚洲一区二区偷拍精品| 精品久久一区二区| 91丨porny丨国产入口| 成人三级在线视频| 天堂一区二区在线| 国产精品色噜噜| 欧美激情在线免费观看| 欧美日韩国产一级二级| 日韩欧美一级二级三级久久久| 国产精品亲子伦对白| 精品国产乱码久久| 欧美一区二区免费| 7777精品伊人久久久大香线蕉的 | 三级在线观看一区二区 | 在线综合视频播放| 欧美人动与zoxxxx乱| 91国偷自产一区二区三区观看| 国产成人亚洲综合a∨婷婷| 国产乱人伦精品一区二区在线观看| 久久爱www久久做| 久色婷婷小香蕉久久| 久久不见久久见免费视频7| 精品一区二区三区视频在线观看 | 91精品在线观看入口| 欧美一区二区三区的| 日韩一区二区三区电影在线观看| 欧美一级生活片| 久久蜜桃一区二区| 中文字幕av一区二区三区| 最新久久zyz资源站| 一区二区三区日韩欧美精品| 天天综合网天天综合色| 久久se这里有精品| 国产激情视频一区二区在线观看| 成人一级黄色片| 色婷婷久久久综合中文字幕| 精品视频一区二区三区免费| 91精品国产品国语在线不卡| 欧美一区三区四区| 久久久精品免费免费| 亚洲欧洲无码一区二区三区| 亚洲小说欧美激情另类| 久久精品国产亚洲a|