午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > Lua和C語言的交互詳解

Lua和C語言的交互詳解

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

前言

對于Lua的基礎總結總算告一段落了,從這篇博文開始,我們才真正的進入Lua的世界,一個無聊而又有趣的世界。來吧。

Lua語言是一種嵌入式語言,它本身的威力有限;當Lua遇見了C,那它就展示了它的強大威力。C和Lua是可以相互調用的。第一種情況是,C語言擁有控制權,Lua是一個庫,這種形式中的C代碼稱為“應用程序代碼”;第二種情況是,Lua擁有控制權,C語言是一個庫,這個時候C代碼就是“庫代碼”。“應用程序代碼”和“庫代碼”都使用同樣的API來與Lua通信,這些API就稱為C API。

C API是一組能使C代碼與Lua交互的函數,包括很多對Lua代碼的操作。如何操作,操作什么,我們的文章我都會一一總結。C API是非常靈活而強大的。為了表示它的NB之處,不先來一段小的DEMO程序展示一下,怎么能夠行呢?

復制代碼 代碼如下:

#include iostream>
#include string.h>
 
extern "C"
{
    #include "lua.h"
    #include "lauxlib.h"
    #include "lualib.h"
}
int main()
{
    char buff[256] = {0};
    int error;
    lua_State *L = luaL_newstate(); // 打開Lua
    luaL_openlibs(L); // 打開標準庫
    while (fgets(buff, sizeof(buff), stdin) != NULL)
    {
        error = luaL_loadbuffer(L, buff, strlen(buff), "line")
            || lua_pcall(L, 0, 0, 0);
        if (error)
        {
            fprintf(stderr, "%s", lua_tostring(L, -1));
            lua_pop(L, 1); // 從棧中彈出錯誤消息
        }
    }
 
    lua_close(L);
    return 0;
}

如果你沒有接觸過C API,對于上面這段代碼,你肯定不會明白它是干什么的。什么也不說,你運行一下吧。然后輸入Lua語句,看看運行結果。

先對上述代碼引入的幾個頭文件進行解釋一下:

頭文件lua.h定義了Lua提供的基礎函數,包括創建Lua環境、調用Lua函數、讀寫Lua環境中全局變量,以及注冊供Lua調用的新函數等等;

頭文件lauxlib.h定義了輔助庫提供的輔助函數,它的所有定義都以LuaL_開頭。輔助庫是一個使用lua.h中API編寫出的一個較高的抽象層。Lua的所有標準庫編寫都用到了輔助庫;輔助庫主要用來解決實際的問題。輔助庫并沒有直接訪問Lua的內部,它都是用官方的基礎API來完成所有工作的;

頭文件lualib.h定義了打開標準庫的函數。Lua庫中沒有定義任何全局變量。它將所有的狀態都保存在動態結構lua_State中,所有的C API都要求傳入一個指向該結構的指針。luaL_newstate函數用于創建一個新環境或狀態。當luaL_newstate創建一個新的環境時,新的環境中并沒有包含預定義的函數(eg.print)。為了使Lua保持靈活,小巧,所有的標準庫都被組織到了不同的包中。當我們需要使用哪個標準庫時,就可以調用lualib.h中定義的函數來打開對應的標準庫;而輔助函數luaL_openlibs則可以打開所有的標準庫。

頭文件說完了,如果對代碼中的extern “C”不懂的同學,請看這里。然后,就沒有然后了,然后我就先不解釋了,等我將后面的內容總結完,再回過頭來看,你會明白的更徹底。點擊這里去下載完整項目工程。

Lua和C語言通信的主要方法是一個無處不在的虛擬棧。幾乎所有的API調用都會操作這個棧上的值;所有的數據交換,無論是Lua到C語言或C語言到Lua都通過這個棧來完成。棧可以解決Lua和C語言之間存在的兩大差異,第一種差異是Lua使用垃圾收集,而C語言要求顯式地釋放內存;第二種是Lua使用動態類型,而C語言使用靜態類型。

為了屏蔽C和Lua之間的差異性,讓彼此之間的交互變的通常,便出現了這個虛擬棧。棧中的每個元素都能保存任何類型的Lua值,當在C代碼中要獲取Lua中的一個值時,只需調用一個Lua API函數,Lua就會將指定值壓入棧中;要將一個值傳給Lua時,需要先將這個值壓入棧,然后調用Lua API,Lua就會獲得該值并將其從棧中彈出。為了將C類型的值壓入棧,或者從棧中獲取不同類型的值,就需要為每種類型定義一個特定的函數。是的,我們的確是這么干的。

Lua嚴格地按照LIFO規范來操作這個棧。但調用Lua時,Lua只會改變棧的頂部。不過,C代碼則有更大的自由度,它可以檢索棧中間的元素,甚至在棧的任意位置插入或刪除元素。

壓入棧

對于每種可以呈現在Lua中的C類型,API都有一個對應的壓入函數,我這里把它們都列出來:

復制代碼 代碼如下:

void lua_pushnil(lua_State *L);
void lua_pushboolean(lua_State *L, int bool);
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);

上面的函數非常簡單,從命名就能知道它們的含義。這里不多說。稍后提供詳細的實例代碼供參考。由于這個棧并不是無限大的,當向棧中壓入一個元素時,應該確保棧中具有足夠的空間。當Lua啟動時,或Lua調用C語言時,棧中至少會有20個空閑的槽。這些空間一般情況下是足夠的,所有我們一般是不用考慮的,但總是會有特殊情況的,如果調用一個具有很多參數的函數,就需要調用lua_checkstack來檢查棧中是否有足夠的空間。

查詢元素

API 使用索引來棧中的元素。第一個壓入棧中的元素索引為1,第二個壓入的元素所以為2,以此類推,直到棧頂。我們也可以用棧頂作為參考物,使用負數來訪問棧中的元素,此時,-1表示棧頂元素,-2表示棧頂下面的元素,以此類推。有的情況適合使用正數索引,而有的情況下適合使用負數索引,我們可以根據實際需求,靈活變通。

為了檢查一個元素是否為特定的類型,API提供了一系列的函數lua_is*,其中*可以是任意Lua類型。這些函數有lua_isnumber、lua_isstring和lua_istable等,所有這些函數都有同樣的原型:

復制代碼 代碼如下:

int lua_is*(lua_State *L, int index);

實際上,lua_isnumber不會檢查值是否為數字類型,而是檢查值是否能轉換為數字類型。lua_isstring也具有同樣的行為,這樣就出現一種狀況,對于能轉換成string的值,lua_isstring總是返回真,所以lua_is*這類函數在使用的時候,并不是非常的方便,所以,就出現了一個lua_type函數,它會返回棧中元素的類型,每種類型都對應一個常亮,這些常亮定義在頭文件lua.h中,它們是:
復制代碼 代碼如下:

/*
** basic types
*/
#define LUA_TNONE        (-1)
#define LUA_TNIL        0
#define LUA_TBOOLEAN        1
#define LUA_TLIGHTUSERDATA    2
#define LUA_TNUMBER        3
#define LUA_TSTRING        4
#define LUA_TTABLE        5
#define LUA_TFUNCTION        6
#define LUA_TUSERDATA        7
#define LUA_TTHREAD        8

如果要檢查一個元素是否為真正的字符串或數字(無需轉換),也可以使用這個函數。

取值

我們一般使用lua_to*函數用于從棧中獲取一個值,有以下常用的取值函數:

復制代碼 代碼如下:

lua_Number      lua_tonumber (lua_State *L, int idx);
lua_Integer     lua_tointeger (lua_State *L, int idx);
int             lua_toboolean (lua_State *L, int idx);
const char     *lua_tolstring (lua_State *L, int idx, size_t *len);
size_t          lua_objlen (lua_State *L, int idx);
lua_CFunction   lua_tocfunction (lua_State *L, int idx);
void           *lua_touserdata (lua_State *L, int idx);
lua_State      *lua_tothread (lua_State *L, int idx);
const void     *lua_topointer (lua_State *L, int idx);

如果指定的元素不具有正確的類型,調用這些函數也不會有問題。在這種情況下,lua_toboolean、lua_tonumber、lua_tointeger和lua_objlen會返回0,而其它函數會返回NULL。lua_tolstring函數會返回一個指向內部字符串副本的指針,并將字符串的長度存入最后一個參數len中。這個內部副本不能修改,返回類型中的const也說明了這點。Lua保證只要這個對應的字符串還在棧中,那么這個指針就是有效的。當Lua調用的一個C函數返回時,Lua就會清空它的棧。這就有一條非常重要的規則:

復制代碼 代碼如下:

***不要在C函數之外使用在C函數內獲得的指向Lua字符串的指針***

所有lua_tolstring返回的字符串在其末尾都會有一個額外的零,不過這些字符串中間也可能有零,字符串的長度通過第三個參數len返回,這才是真正的字符串長度。

lua_objlen函數可以返回一個對象的“長度”。對于字符串和table,這個值就是長度操作符“#”的結果。這個函數還可用于獲取一個“完全userdata”的大小,關于userdata,后面還會單獨總結。

其它棧操作

除了在C語言和棧之間交換數據的函數外,API還提供了以下這些用于普通棧操作的函數:

復制代碼 代碼如下:

/*
** basic stack manipulation
*/
int   lua_gettop (lua_State *L);
void  lua_settop (lua_State *L, int idx);
void  lua_pushvalue (lua_State *L, int idx);
void  lua_remove (lua_State *L, int idx);
void  lua_insert (lua_State *L, int idx);
void  lua_replace (lua_State *L, int idx);

現在就來簡單的說說這幾個函數,lua_gettop函數返回棧中元素的個數,也可以說是棧頂元素的索引。lua_settop將棧頂設置為一個指定的位置,即修改棧中元素的數量,如果之前的棧頂比新設置的更高,那么高出來的這些元素會被丟棄;反之,會向棧中壓入nil來補足大小;比如,調用以下語句就能清空棧:

復制代碼 代碼如下:

lua_settop(L, 0);

也可以使用負數索引來使用lua_settop。lua_pushvalue函數會將指定索引上值得副本壓入棧。lua_remove刪除指定索引上的元素,并將該位置之上的所有元素下移以填補空缺。lua_insert會上移指定位置之上的所有元素以開辟一個槽空間,然后將棧頂元素移到該位置。lua_replace彈出棧頂的值,并將該值設置到指定索引上,但它不會移動任何東西,只是替換了指定索引的值。說了這么多,總結了這么多,不來點真槍實干的,總是覺的很虛,上代碼。點擊這里去下載本篇博文中所有的代碼工程吧。

C API出錯了怎么辦?

沒有十全十美,沒有任何bug的程序的。是的,再NB的人寫的程序,也可能出現問題,有些問題不是我們控制范圍之內的。既然我們無法控制問題的出現,但是我們對問題出現以后的行為進行處理,比如:出現問題了,彈出一個友好的message,這聽起來還是不錯的,很多程序都是這么干的。好吧,伙計,如果C API出錯了怎么辦呢?

Lua中所有的結構都是動態的,它們會根據需要來增長,或者縮小。是的,增長縮小,就涉及到內存的開辟與釋放,這有可能會出錯的,雖然我知道這個概率是很低的,但是對于程序員來說,對于任何可能出現問題的地方都要進行處理。這里有兩種情況:

1.C調用Lua代碼;
2.Lua代碼調用C。

不是所有的API函數都會拋出異常。函數luaL_newstate、lua_load、lua_pcall和lua_close都是安全的。在第一種情況下,一般都是使用lua_pcall來運行Lua代碼,由于lua_pcall是在保護的情況下運行lua代碼,如果發生了內存分配錯誤,lua_pcall會返回一個錯誤代碼,并將解釋器封固在一致的狀態;如果要保護那些與Lua交互的C代碼,可以使用lua_cpcall,這個函數類似于lua_pcall。

對于Lua調用C,當將新的C函數加入Lua時,可能會破壞內存的結構。當我們為Lua編寫庫函數時(Lua調用C的函數),只有一種標準的錯誤處理方法。當一個C函數檢測到一個錯誤時,它就應該調用lua_error,lua_error函數會清理Lua中所有需要清理的東西,然后跳轉回發起執行的那個lua_pcall,并附上一條錯誤消息。在后面的博文中,會有這方面的代碼實例的。

您可能感興趣的文章:
  • 簡單談談lua和c的交互
  • Lua教程(二十):Lua調用C函數
  • C++中調用Lua函數實例
  • Lua中調用C++函數實例
  • Lua與C語言間的交互實例
  • Lua調用自定義C模塊
  • Lua和C++的通信流程分解
  • Lua中調用C語言函數實例
  • C#和lua相互調用的方法教程

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

巨人網絡通訊聲明:本文標題《Lua和C語言的交互詳解》,本文關鍵詞  Lua,和,語言,的,交互,詳解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua和C語言的交互詳解》相關的同類信息!
  • 本頁收集關于Lua和C語言的交互詳解的相關信息資訊供網民參考!
  • 推薦文章
    亚洲精品mv在线观看| 日本一区二区精品视频| 亚洲aaaaaaa| 国产伦理久久久| 播五月开心婷婷综合| 四虎精品欧美一区二区免费| 亚洲女性喷水在线观看一区| 久久久福利影院| 欧美一级夜夜爽| 久操免费在线视频| 2019中文字幕免费视频| 视频精品一区二区| 一本一道久久久a久久久精品91| 国产精品人妖ts系列视频 | 国产精品无码一本二本三本色| 午夜久久久久久电影| 亚洲狠狠婷婷综合久久久久图片| 亚洲男人av在线| 国产成人愉拍精品久久| 国产精品久久久久秋霞鲁丝| 韩国v欧美v日本v亚洲v| 欧美一级免费播放| 欧美色精品在线视频| 亚洲色图27p| 97成人在线视频| 国产综合久久久久久久久久久久| wwwwww欧美| 日本高清视频一区二区| 青青操视频在线播放| 国产精品吹潮在线观看| 成人美女视频在线观看| 性刺激的欧美三级视频| 欧美精品一区二区三区在线播放 | 九九九免费视频| 日韩免费观看网站| 99亚偷拍自图区亚洲| 无限资源日本好片| 亚洲精品日韩久久久| 97精品人妻一区二区三区香蕉| 高清免费日韩| 亚洲精品午夜久久久| www亚洲色图| 欧美亚洲免费电影| 成人av网址在线| 青娱乐精品在线| 色多多国产成人永久免费网站 | 国产成人精品视| www.激情成人| 国产69视频在线观看| 久久成人精品视频| 国产美女在线观看一区| 污色网站在线观看| xvideos亚洲人网站| 蜜臀av国产精品久久久久 | 色屁屁草草影院ccyy.com| 午夜欧美大片免费观看| 成人午夜精品一区二区三区| www.国产福利| 久久综合免费视频影院| 久久国产福利国产秒拍| 国产探花在线看| 久久久精品亚洲| 国产乱子轮精品视频| 五月天丁香花婷婷| 久久久久久久成人| 91视视频在线观看入口直接观看www | 刘玥91精选国产在线观看| 国产精品啪啪啪视频| 日韩视频123| 欧美视频xxx| 欧在线一二三四区| 日韩中文字幕在线免费观看| 国产乱码精品一区二区三区忘忧草| 男操女免费网站| 久久亚洲私人国产精品va| 国产suv精品一区二区三区| gogo亚洲国模私拍人体| 97精品视频在线播放| 国产校园另类小说区| 精品人体无码一区二区三区| 99se婷婷在线视频观看| 色综合久久中文字幕综合网 | 韩国精品一区二区| 91精品又粗又猛又爽| 国产成人精品久久| 亚洲高清久久久| japanese国产在线观看| 免费看欧美一级片| 最新69国产成人精品视频免费| 国产不卡在线一区| 怡红院一区二区三区| 国产99午夜精品一区二区三区| 激情久久av一区av二区av三区| www.久久久久久久| 男女私大尺度视频| 久久久国产精彩视频美女艺术照福利| 99视频热这里只有精品免费| 免费看特级毛片| 奇米888一区二区三区| 精品国内二区三区| 国产精品资源网站| 成人性视频免费看| 日本成人黄色免费看| 精品国内二区三区| 国产成人精品aa毛片| 欧美激情亚洲色图| 欧美高清性xxxxhd| 精品在线欧美视频| 99re视频精品| 国产无码精品视频| 免费不卡av在线| 欧美激情欧美激情在线五月| 亚洲欧洲精品一区二区三区| 波多野结衣人妻| 玩弄japan白嫩少妇hd| 欧美伊久线香蕉线新在线| 亚洲国产一区二区a毛片| 国产又粗又长又黄| 6080国产精品| 超碰97网站| 亚洲国产91色在线| 99久久伊人精品| 国产 日韩 欧美 在线| 国自产拍偷拍精品啪啪一区二区| 欧美国产一区二区三区| 亚洲国产cao| 日韩中文字幕免费观看| 国产成人无码一区二区在线观看| 久久精品成人一区二区三区蜜臀| 日韩高清欧美高清| 国产欧美精品一区| 亚洲综合免费视频| 成人啪啪18免费游戏链接| 成人看片视频| 亚洲乱码一区av黑人高潮| 久久久久久9999| av中文在线播放| 污版视频在线观看| 国产传媒欧美日韩| 亚洲性线免费观看视频成熟| 国产精品美女久久久久久久久| 91精东传媒理伦片在线观看| 亚洲AV成人精品| 免费国产一区二区| 久久伊人精品一区二区三区| 精品美女永久免费视频| 久久精品国产免费| 日产欧产va高清| 日本肉体xxxx裸体xxx免费| av一区二区三区四区电影| 日韩va亚洲va欧洲va国产| 国产精品久久久久精k8| 精品国产一级片| 这里只有久久精品| 国产美女永久无遮挡| 国产日韩在线播放| 亚洲精品视频久久| 亚洲视频一二三| 亚洲国产精品久久久久久久| 91成人精品一区二区| 精品少妇人妻av免费久久洗澡| 日韩av片免费在线观看| 精品毛片乱码1区2区3区| 中文字幕av一区 二区| 欧美特黄一级视频| 青青操国产视频| 午夜大片在线观看| 午夜精品一区二区三区四区 | 日本一区二区高清视频| 国外成人性视频| 欧美成人一区二区三区片免费 | 日韩女同互慰一区二区| 亚洲国产精品黑人久久久| 老牛影视av牛牛影视av| 久久精品www人人爽人人| 欧美xxxxxbbbbb| 国产又大又长又粗又黄| 国产精品嫩草影院久久久| 亚洲欧美制服综合另类| 色综合久久99| 国产色爱av资源综合区| 轻轻草成人在线| 这里只有精品999| 中文字幕被公侵犯的漂亮人妻| 无码aⅴ精品一区二区三区浪潮| 精品国产一区二区三区四区精华 | 亚洲图片欧美视频| 成人性生交大片| 人妻91麻豆一区二区三区| 久青草视频在线观看| 蜜臀视频在线观看| 久久久一本二本三本| 欧美日韩电影一区二区| 国产精品久久91| 久久午夜a级毛片| 精品欧美一区二区在线观看| 调教+趴+乳夹+国产+精品| 91啪九色porn原创视频在线观看| 国产精品久免费的黄网站| 欧美日韩视频在线| 欧美猛男性生活免费| 欧美精品二区三区| 西西大胆午夜视频| 日韩在线xxx| 欧美h视频在线观看| 国产精品v欧美精品∨日韩| 高清亚洲成在人网站天堂| 亚洲人成电影网站色…| 欧美性生活久久| 夜夜精品视频一区二区| 国产偷国产偷精品高清尤物| 国产精品99久久久久久有的能看 | 久久久久亚洲AV成人无码国产| 日韩欧美亚洲天堂| 一区二区三区在线视频看| 国产精品福利视频| 国产精品日韩久久久久| 97在线视频免费看| 久久久国产精品免费| 亚洲网站在线播放| 欧美zozozo| 欧美日韩不卡一区二区| 色综合久久久久综合| 亚洲自拍偷拍综合| 亚洲人精品午夜| 久久精品视频免费| 成人avav在线| 国产精品 日产精品 欧美精品| 奇米精品一区二区三区在线观看一 | 96国产粉嫩美女| 国产成人亚洲综合91| 欧美国产中文字幕| 久久久91精品国产一区不卡| 亚洲片在线资源| 日韩精品欧美国产精品忘忧草| 欧美变态tickling挠脚心| 欧美疯狂性受xxxxx喷水图片| 91国模大尺度私拍在线视频| 午夜伦欧美伦电影理论片| 亚洲国产日韩综合久久精品| 亚洲精品欧美二区三区中文字幕| 国产精品对白交换视频| 国产精品久久久久久久久久免费看| 91欧美一区二区| 久久久久99精品一区| 久久久精品欧美丰满| 久久综合丝袜日本网| 久久久久9999亚洲精品| 日本一区二区免费在线观看视频| 国产午夜一区二区三区| 国产三级精品视频| 国产精品久久久久永久免费观看| 中文字幕一区二区三中文字幕| 中文字幕视频一区二区三区久| 中文字幕一区在线| 一区二区三区鲁丝不卡| 亚洲成人自拍网| 日韩欧美在线免费| 色久综合一二码| 欧美视频一二三区| 日韩亚洲欧美中文三级| 日韩一级大片在线观看| 日韩av在线导航| 中文字幕欧美在线| 欧美激情国产日韩精品一区18| 久久久在线免费观看| 国产成人福利网站| 亚洲自拍偷拍在线| 麻豆精品传媒视频| 伊人久久大香线蕉午夜av| 国产亚洲精品久久久久久久| 久久视频这里有精品| 中文字幕在线观看第三页| 久久精品一卡二卡| av男人的天堂av| 毛片a片免费观看| 免费黄色一级大片| 亚洲精品一区二区三区蜜桃| 天天综合天天色| 国产一区二区免费视频| 久久亚洲精华国产精华液| 一区二区三区视频在线观看| 精品国产91久久久久久| 666欧美在线视频| 精品在线小视频| 午夜精品在线观看| 成人美女免费网站视频| 免费久久久一本精品久久区| 老司机午夜网站| 日本中文字幕影院| 成年人免费观看视频网站| 国产一级av毛片| 一级片视频免费| 老司机免费视频一区二区| 国产亚洲视频系列| 狠狠久久亚洲欧美专区| 精品精品欲导航| 久久91精品国产| 亚洲999一在线观看www| 先锋影音日韩| 黄色片视频在线| 阿v天堂2014| 亚洲午夜激情视频| 国内精品久久久久影院薰衣草| 国产三级精品三级| 欧美午夜精品久久久久久孕妇| 日韩精品视频观看| 97在线视频一区| 久久精品丝袜高跟鞋| 国产成人精品视频免费看| 欧美大喷水吹潮合集在线观看| 久久黄色免费网站| 三级小视频在线观看| 91免费看`日韩一区二区| 欧美视频在线免费看| 日韩精品视频免费在线观看| 日本高清不卡在线| 天堂av一区二区| 亚洲第一天堂久久| 乱h高h女3p含苞待放| 精品国产999久久久免费| 99久久国产综合精品女不卡| 精品高清一区二区三区| 一本色道久久综合狠狠躁篇的优点| 国产精品久久久久久久久久久久久 | 国产人妻大战黑人20p| 中文字幕在线2018| 国产精品亚洲第一| 欧美午夜精品在线| 中文字幕视频一区二区在线有码 | 91精品久久久久久久99蜜桃| 欧美激情区在线播放| 欧美日韩另类丝袜其他| 国产三级生活片| 久久国产精品波多野结衣av| 五月婷婷激情在线| 亚洲日本一区二区| 日韩av网站导航| 成人精品一区二区三区| av在线播放天堂| 国产综合精品在线| 亚洲乱码精品久久久久..| 亚洲国产精品国自产拍av| 精品福利视频一区二区三区| 国产成人精品在线播放| 国内精品国产三级国产99| 人妻少妇一区二区| 亚洲国产精品二区| 亚洲少妇最新在线视频| 亚洲性69xxxbbb| 久久国产精品高清| 逼特逼视频在线观看| 亚洲一区二区天堂| 国产欧美精品国产国产专区 | 中文字幕有码av| 99久在线精品99re8热| 精品国产av无码一区二区三区| 麻豆视频在线免费看| 奇米888四色在线精品| 久久久国产精彩视频美女艺术照福利| 国产成人啪精品午夜在线观看| 中文字幕亚洲图片| 精品一区二区国语对白| 男女高潮又爽又黄又无遮挡| 91精品91久久久久久| 欧美日韩在线观看成人| 久久久久成人精品| 久久久久久久久久一级| 成人激情av| 欧美日韩视频一区二区| 欧美在线 | 亚洲| av无码精品一区二区三区| 91爱视频在线| 欧美一区二区福利在线| 日韩黄色片网站| 欧美日韩精品在线一区二区| 久久国产精品久久国产精品| 免费人成在线不卡| 欧美一级黄色片视频| 亚洲欧洲午夜一线一品| av网站在线观看免费| 日韩亚洲欧美视频| 亚洲高清久久久久久| 日韩在线观看视频一区二区三区| 丝袜老师办公室里做好紧好爽| 在线视频国产一区| 这里只有精品国产| 狠狠色综合色区| 欧美日韩大陆一区二区| 国产乱淫av一区二区三区| 国产熟妇久久777777| 国自产精品手机在线观看视频| 欧美国产精品一区二区| 国产一区二区三区视频播放| 国产精品一区二区三区免费| 亚洲欧洲国产日韩| 亚洲午夜久久久久久久久| 国产美女主播一区| 福利精品视频在线| 91禁在线观看| 网站一区二区三区| 欧亚精品中文字幕| 欧美亚洲国产bt| 国产成人免费看一级大黄| 日韩国产精品毛片| 国产一区二区三区久久精品| 国产另类ts人妖一区二区| 午夜理伦三级做爰电影| 日韩欧美亚洲日产国| 久久久久久成人精品|