久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区

Rss & SiteMap

曙海教育集團(tuán)論壇 http://www.bjzhda.cn

曙海教育集團(tuán)論壇
共1 條記錄, 每頁顯示 10 條, 頁簽: [1]
[瀏覽完整版]

標(biāo)題:什么是API

1樓
wangxinxin 發(fā)表于:2010-12-14 14:31:43
首先,有必要向大家講一講,什么是API。所謂API本來是為C和C++程序員寫的。API說來說去,就是一種函數(shù),他們包含在一個附加名為DLL的動態(tài)連接庫文件中。用標(biāo)準(zhǔn)的定義來講,API就是Windows的32位應(yīng)用程序編程接口,是一系列很復(fù)雜的函數(shù),消息和結(jié)構(gòu),它使編程人員可以用不同類型的編程語言編制出的運(yùn)行在Windows95和Windows NT操作系統(tǒng)上的應(yīng)用程序。可以說,如果你曾經(jīng)學(xué)過VC,那么API對你來說不是什么問題。但是如果你沒有學(xué)過VC,或者你對Windows95的結(jié)構(gòu)體系不熟悉,那么可以說,學(xué)習(xí)API將是一件很辛苦的事情。

如果你打開WINDOWS的SYSTEM文件夾,你可以發(fā)現(xiàn)其中有很多附加名為DLL的文件。一個DLL中包含的API函數(shù)并不只是一個,數(shù)十個,甚至是數(shù)百個。我們能都掌握它嘛?回答是否定的∶不可能掌握。但實際上,我們真的沒必要都掌握,只要重點(diǎn)掌握Windos系統(tǒng)本身自帶的API函數(shù)就可以了。但,在其中還應(yīng)當(dāng)拋開掉同VB本身自有的函數(shù)重復(fù)的函數(shù)。如,VB
的etAttr命令可以獲得文件屬性,SetAttr可以設(shè)置文件屬性。對API來講也有對應(yīng)的函數(shù)
GetFileAttributes和SetFileAttributes,性能都差不多。如此地一算,剩下來的也就5、600個。是的,也不少。但,我可以敢跟你說,只要你熟悉地掌握100個,那么你的編程水平比現(xiàn)在高出至少要兩倍。盡管人們說VB和WINDOWS具有密切的關(guān)系,但我認(rèn)為,API更接近
WINDOWS。如果你學(xué)會了API,首要的收獲便是對WINDOWS體系結(jié)構(gòu)的認(rèn)識。這個收獲是來自不易的。

如果你不依靠API會怎么樣?我可以跟你說,絕大多是高級編程書本(當(dāng)然這不是書的名程叫高級而高級的,而是在一開始的《本書內(nèi)容》中指明《本書的閱讀對象是具有一定VB基礎(chǔ)的讀者》的那些書),首先提的問題一般大都是從API開始。因此可以說,你不學(xué)API,你大概將停留在初級水平,無法往上攀登。唯一的途徑也許就是向別人求救∶我快死了,快來救救我呀,這個怎么辦,那個怎么辦?煩不煩呢?當(dāng)然,現(xiàn)在網(wǎng)上好人太多(包括我在內(nèi),嘻嘻),但,你應(yīng)當(dāng)明白,通過此途徑,你的手中出不了好的作品。這是因為缺乏這些知識你的腦子里根本行不成一種總體的設(shè)計構(gòu)思。
API文本游覽器 [返回]

很多API函數(shù)都是很長很長的。想看什么樣子嗎?如下就是作為例子的API DdeClientTransaction函數(shù)∶
Declare Function DdeClientTransaction Lib "user32" (pData As Byte, ByVal cbData As Long, ByVal hConv As Long, ByVal hszItem As Long, ByVal wFmt As Long, ByVal wType As Long, ByVal dwTimeout As Long, pdwResult As Long) As Long
哇!這么長?如果你從來沒有接觸過API,我想你肯定被嚇住了。你也許考慮,該不該繼續(xù)學(xué)下去。不過不要擔(dān)心,幸運(yùn)的是Microsoft的設(shè)計家們?yōu)槲覀兲峁┝擞杏玫墓ぞ撸@便是API
文本查看器。

通過API文本查看器,我們可以方便地查找程序所需要的函數(shù)聲明、結(jié)構(gòu)類型和常數(shù),然后將它復(fù)制到剪貼板,最后再粘貼到VB程序的代碼段中。在大多數(shù)情況下,只要我們確定了程序所需要的函數(shù)、結(jié)構(gòu)和常數(shù)這三個方面后,就可以通過對API文本游覽器的以上操作將他們加入到程序段中,從而程序中可以使用這些函數(shù)了。這些是學(xué)習(xí)API最基本的常識問題,它遠(yuǎn)遠(yuǎn)占不到API的龐大的體系內(nèi)容。今后我們把精力浪費(fèi)(這絕不是浪費(fèi))在哪里呢?那就是∶
什么時候使用什么函數(shù),什么時候使用什么結(jié)構(gòu)類型,什么時候使用什么常數(shù)。
API函數(shù)聲明 [返回]

讓我們回想一下。在VB中,如何聲明函數(shù)呢?我想,如果你正在看此文,那么你絕對能夠回答得出這個問題。以下便是你應(yīng)該很熟悉的函數(shù)聲明∶
Function SetFocus (ByVal hwnd As Long) As Long
即,這行代碼定義了名為SetFocus的函數(shù),此函數(shù)具有一個Long型數(shù)據(jù)類型的參數(shù),并按值傳遞(ByVal),函數(shù)執(zhí)行后將返回一個Long型數(shù)據(jù)。
API函數(shù)的聲明也很類似,如,API中的SetFocus 函數(shù)是這樣寫的∶

Declare Function SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
有點(diǎn)復(fù)雜了一些。是的,是復(fù)雜了點(diǎn)。但我可以告訴你,除了這些多出來的部分,其他部分還是和你以前學(xué)到的東西是一樣的。函數(shù)在程序中的調(diào)用也是一樣。如:
Dim dl As Long
dl&=SetFoucs(Form1.Hwnd)
但,一點(diǎn)是清楚的。它不象你自己寫的程序那樣能夠看到里面的運(yùn)行機(jī)理,也不像VB
自帶的函數(shù)那樣,能夠從VB的聯(lián)機(jī)幫助中查到其用法。唯一的方法就是去學(xué)、查VB以外的資料。

Declare 語句用于在模塊級別中聲明對動態(tài)鏈接庫 (DLL) 中外部過程的引用。對此,你只要記住任何API函數(shù)聲明都必須寫這個語句就可以了。
Iib 指明包含所聲明過程或函數(shù)的動態(tài)鏈接庫或代碼資源。也就是說,它說明的是,函數(shù)或過程從何而來的問題。
如在上例中,SetFocus Lib "user32"說明 函數(shù) SetFocus 來自 user32.dll文件。主要的dll動態(tài)連接庫文件有∶
user32.dll Windows管理。生成和管理應(yīng)用程序的用戶接口。

GDI32.dll 圖形設(shè)備接口。產(chǎn)生Windows設(shè)備的圖形輸出
Kernel32.dll 系統(tǒng)服務(wù)。訪問操作系統(tǒng)的計算機(jī)資源。
注意,當(dāng)DLL文件不在Windows或System文件夾中的時候,必須在函數(shù)中說明其出處(
路徑)。如,SetFocus Lib "c:\Mydll\user32"
函數(shù)聲明中的Alias 是可選的。表示將被調(diào)用的過程在動態(tài)鏈接庫 (DLL) 中還有另外的名稱(別名)。如,Alias "SetFocus" ,說明SetFocus函數(shù)在User32.dll中的另外一個名稱是,
SetFocus。怎么兩個名都一樣呢?當(dāng)然,也可以是不同的。在很多情況下,Alias說明的函數(shù)名,即別名最后一個字符經(jīng)常是字符A,如SetWindowsText函數(shù)的另一個名稱是
SetWindowsTextA,表示為Alias "SetWindowsTextA"。這個A只不過是設(shè)計家們的習(xí)慣的命名約定,表示函數(shù)屬于ANSI版本。

那么,別名究竟有什么用途呢?從理論上講,別名提供了用另一個名子調(diào)用API的函數(shù)方法。如果你指明了別名,那么 盡管我們按Declare語句后面的函數(shù)來調(diào)用該函數(shù),但在函數(shù)的實際調(diào)用上是以別名作為首要選擇的。如,以下兩個函數(shù)(Function,ABCD)聲明都是有效的,他們調(diào)用的是同一個 SetFocus函數(shù)∶
Declare Function SetFocus Lib "user32" "SetFocus" (ByVal hwnd As Long) As Long
Declare ABCD SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long

需要注意的是,選用Alias的時候,應(yīng)注意別名的大小寫;如果不選用Alias 時的時候,函數(shù)名必須注意大小寫,而且不能改動。當(dāng)然,在很多情況下,由于函數(shù)聲明是直接從API
文本游覽器中拷貝過來的,所以這種錯誤的發(fā)生機(jī)會是很少的,但您有必要知道這一點(diǎn)。
最后提醒你一句,API聲明(包括結(jié)構(gòu)、常數(shù))必須放在窗體或模塊的"通用(General Declarations)段。
數(shù)據(jù)類型與"類型安全" [返回]

API函數(shù)中使用的數(shù)據(jù)類型基本上和VB中的一樣。但作為WIN32的API函數(shù)中,不存在Integer
數(shù)據(jù)類型。另外一點(diǎn)是在API函數(shù)中看不到Boolean數(shù)據(jù)類型。 Variant數(shù)據(jù)類型在API函數(shù)中是以Any的形式出現(xiàn),如Data As Any。盡管其含義是允許任意參數(shù)類型作為一個該API函數(shù)的參數(shù)傳遞,但這樣做存在一定的缺點(diǎn)。其原因是,這將會使得對目標(biāo)參數(shù)的所有類型檢查都會被關(guān)閉。這自然會給各種類型的參數(shù)調(diào)用帶來了產(chǎn)生錯誤的機(jī)會。

為了強(qiáng)制執(zhí)行嚴(yán)格的類型檢查,并避免上面提到的問題,一個辦法是在函數(shù)里使用上面提到到Alias技術(shù)。如對API函數(shù) GetDIBits 可進(jìn)行另外一種聲明方法。如下∶
GetDIBits函數(shù)的原型∶
Public Declare Function GetDIBits Lib "gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
GetDIBits函數(shù)的改型∶

Public Declare Function GetDIBitsLong Lib "gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Long, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
通過本課程前面所學(xué)到的知識,我們已經(jīng)可以得知原型 GetDIBits函數(shù)也好,改型 GetDIBitsLong函數(shù)也好,實際將調(diào)用的都是Alias所指定的 GetDIBits原函數(shù)。但你應(yīng)當(dāng)看到,兩者的區(qū)別在于,我們在改型的函數(shù)中強(qiáng)制指定lpBits參數(shù)為Long形。這樣就會使得函數(shù)調(diào)用中發(fā)生的錯誤機(jī)率減少到了最小。這種方法叫做"安全類型"聲明。

API函數(shù)中經(jīng)常看到的數(shù)據(jù)類型有∶Long,String,Byte,Any....(也就這些吧。)
常 數(shù) [返回]

對于API常數(shù)來講,沒有什么太特別的學(xué)問。請看VB中的以下代碼∶
Msg = MsgBox("您好", vbOKCancel)
我們知道, vbOKCancel這個常數(shù)的值等于1。對上面的代碼我們完全可以這樣寫,而不會影響代碼的功能∶
Msg = MsgBox("您好", 1)
但你大概不太愿意選擇后一種,因為這會使得看懂代碼費(fèi)勁起來。這種方法也被API采取了。只是API常數(shù)必須在事情之前做好初始化聲明VB本身是看不懂的。其內(nèi)容仍然來自與API
文本游覽器。具體形式如下等等∶

Public Const ABM_ACTIVATE = &H6
Public Const RIGHT_CTRL_PRESSED = &H4
Public Const RPC_E_SERVER_DIED = &H80010007
Private Const RPC_S_CALL_FAILED_DNE = 1727&
在常數(shù)的初始化中,有些程序使用Global,如Global Const ABM_ACTIVATE = &H6,但我認(rèn)為Public完全可以代替它。過去我也用過Global,但現(xiàn)在不大用了。一會兒用這個,一會兒用那個,各程序之間不能保持一致性了,起碼看起來別扭。
結(jié) 構(gòu) [返回]

結(jié)構(gòu)是C和C++語言中的說法。在VB中一般稱為自定義數(shù)據(jù)類型。想必很多朋友都已經(jīng)認(rèn)識它。在API領(lǐng)域里,我更喜歡把它叫做結(jié)構(gòu),因為API各種結(jié)構(gòu)類型根本不是我定義(
自定義)的。
在VB中,API結(jié)構(gòu)同樣由TYPE.......END TYPE語句來定義。如,在API中,點(diǎn)(Point)結(jié)構(gòu)的定義方法如下:
Public Type POINTAPI
X As Long '點(diǎn)在X坐標(biāo)(橫坐標(biāo))上的坐標(biāo)值

Y As Long '點(diǎn)在Y坐標(biāo)(縱坐標(biāo))上的坐標(biāo)值
End Type
又如,API中矩形(Rect)結(jié)構(gòu)的定義如下∶
Public Type RECT
Left As Long '矩形左上角的X坐標(biāo)
Top As Long '矩形左上角的Y坐標(biāo)
Right As Long '矩形右下角的X坐標(biāo)
Bottom As Long '矩形右下角的Y坐標(biāo)

End Type
這些內(nèi)容同樣可以從API文本游覽器中拷貝過來。這些結(jié)構(gòu)中的變量名可隨意改動,而不會影響結(jié)構(gòu)本身。也就是說,這些成員變量都是虛擬的。如,POINTAPI結(jié)構(gòu)可改為如下∶
Public Type POINTAPI
MyX As Long '點(diǎn)在X坐標(biāo)(橫坐標(biāo))上的坐標(biāo)值
MyY As Long '點(diǎn)在Y坐標(biāo)(縱坐標(biāo))上的坐標(biāo)值
End Type
不過,一般來講,是沒有這種必要的。結(jié)構(gòu)本身是一種數(shù)據(jù)類型,因此,使用時必須聲明具體變量為該結(jié)構(gòu)型,才能在程序中真正使用到該結(jié)構(gòu)。結(jié)構(gòu)的聲明方法和其他數(shù)據(jù)的聲明方法一樣,如,以下語句把變MyPoint聲明為POINTAPI結(jié)構(gòu)類型∶

MyPoint As POINTAPI
引用結(jié)構(gòu)中的成員變量也十分簡單,在結(jié)構(gòu)名后面加上一個".",然后緊接著寫要引用的成員變量即可。這很象VB中的引用一個對象的某個屬性。如,假如我們把上面已經(jīng)聲明的MyPoint結(jié)構(gòu)中的X變量的值賦給變量Temp&
則代碼如下∶
Temp&=MyPoint.X
但,特別注意的是,你千萬不要認(rèn)為上例中的MyPoint是一個值。它不是值,而是地址(
指針)。值和地址是完全不同的概念。結(jié)構(gòu)要求按引用傳遞給WINDOWS函數(shù),即所有API
函數(shù)中,結(jié)構(gòu)都是按ByRef傳遞的(在Declare語句 中ByRef是默認(rèn)型)。對于結(jié)構(gòu)的傳遞,你不要試圖采用ByVal,你將一無所獲。由于結(jié)構(gòu)名實際上就是指向這個結(jié)構(gòu)的指針(這個結(jié)構(gòu)的首地址),所以,你也就傳送特定的結(jié)構(gòu)名就可以了(參見小結(jié),我用紅色字體來突出了這種傳遞方式)。

由于結(jié)構(gòu)傳送的是指針,所以函數(shù)將直接對結(jié)構(gòu)進(jìn)行讀寫操作。這種特性很適合于把函數(shù)執(zhí)行的結(jié)果裝載在結(jié)構(gòu)之中。
小 結(jié) [返回]

以下的程序是為了總結(jié)本課中學(xué)到的內(nèi)容而給出的。啟動VB,新建一個項目,添加一個命令按鈕,并把下面的代碼拷貝到代碼段中,運(yùn)行它。

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI '定義點(diǎn)(Point)結(jié)構(gòu)
X As Long '點(diǎn)在X坐標(biāo)(橫坐標(biāo))上的坐標(biāo)值
Y As Long '點(diǎn)在Y坐標(biāo)(縱坐標(biāo))上的坐標(biāo)值
End Type
Sub PrintCursorPos( )
Dim dl AS Long
Dim MyPoint As POINTAPI
dl&= GetCursorPos(MyPoint) '調(diào)用函數(shù),獲取屏幕鼠標(biāo)坐標(biāo)

Debug.Print "X=" & Str(MyPoint.X) & " and " & "Y=" & Str(MyPoint.Y)
End Sub
Private Sub Command1_Click()
PrintCursorPos

End Sub

輸出結(jié)果為(每次運(yùn)行都可能得到不同的結(jié)果,這得由函數(shù)調(diào)用時鼠標(biāo)指針在屏幕中所處的位置而決定)∶
X= 240 and Y= 151

程序中,GetCursorPos函數(shù)用來獲取鼠標(biāo)指針在屏幕上的位置。

以上例子中,你可以發(fā)現(xiàn),以參數(shù)傳遞的MyPpint結(jié)構(gòu)的內(nèi)容在函數(shù)調(diào)用后發(fā)生了實質(zhì)性變化。這是由于結(jié)構(gòu)是按ByRef傳遞的原因。
共1 條記錄, 每頁顯示 10 條, 頁簽: [1]

Copyright © 2000 - 2009 曙海教育集團(tuán)
Powered By 曙海教育集團(tuán) Version 2.2
Processed in .01367 s, 2 queries.
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
日韩欧美在线影院| 懂色中文一区二区在线播放| 久久99国产精品99久久| 成人免费视频网站在线观看| 国产69精品一区二区亚洲孕妇| 久久精品国产亚洲高清剧情介绍| 亚洲影院久久精品| 亚洲一区中文在线| 亚洲图片欧美一区| 天堂影院一区二区| 经典三级在线一区| 大白屁股一区二区视频| 不卡一区二区在线| 国产福利久久精品| 色噜噜色狠狠狠狠狠综合色一| 亚洲精品一区二区三区蜜桃久| 色先锋久久av资源部| 欧美日韩不卡一区| 久久久美女毛片| 亚洲欧洲国产专区| 视频一区欧美日韩| 国产精品一品二品| 91超碰在线免费观看| 精品乱色一区二区中文字幕| 天堂资源在线亚洲资源| 欧美日产国产精品| 国产亚洲女人久久久久毛片| 亚洲免费观看高清在线观看| 久久国产尿小便嘘嘘| 99久久综合99久久综合网站| 精选一区二区三区四区五区| 在线国产99| 精品久久免费看| 亚洲啪啪综合av一区二区三区| 日韩成人免费电影| 91小视频免费看| 一区不卡字幕| 欧美tickling网站挠脚心| 中文字幕一区免费在线观看| 毛片基地黄久久久久久天堂| 91麻豆精品在线观看| 宅男噜噜99国产精品观看免费| 日韩精品一区二区在线| 亚洲国产日韩精品| jlzzjlzz亚洲女人18| 午夜精品一区二区三区四区 | 欧美日韩黄色影视| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 免费av成人在线| 91丨porny丨在线| 一区二区三区av| 久久久久青草大香线综合精品| 一区二区三区四区五区视频在线观看| 国产麻豆视频精品| 日韩色妇久久av| 久久久综合网站| 精品一区二区久久| 欧美高清性xxxxhd| 日韩一级完整毛片| 日日夜夜免费精品| 久久国产精品精品国产色婷婷| 在线综合视频播放| 亚洲国产精品久久人人爱| 99国产一区二区三精品乱码| 欧美三级日韩三级国产三级| 亚洲欧美一区二区不卡| www..com久久爱| 欧美三级中文字| 亚洲综合免费观看高清完整版| av中文字幕在线不卡| 色综合激情五月| 一区二区激情小说| 精品国产一区二区三区四区精华| 日韩欧美在线网站| 久久99精品久久久久久| 一级做a爰片久久| 一区二区三区日韩在线观看| 波多野结衣成人在线| 欧美性大战xxxxx久久久| 一区二区三区精密机械公司| 国产精品三区四区| 精品国产免费久久| 国产91在线|亚洲| 欧美人狂配大交3d怪物一区| 日韩影院在线观看| 伊人久久av导航| 午夜精品aaa| 一级日韩一区在线观看| 亚洲国产裸拍裸体视频在线观看乱了| 成人自拍偷拍| 国产偷国产偷精品高清尤物| 成人av在线资源网站| 欧美日韩久久久一区| 免费三级欧美电影| 色老头久久综合| 玖玖九九国产精品| 91黄色在线观看| 久久不见久久见免费视频7| 色先锋aa成人| 理论电影国产精品| 欧美日韩国产首页在线观看| 精品一区二区在线播放| 精品婷婷伊人一区三区三| 美美哒免费高清在线观看视频一区二区 | 欧美做爰猛烈大尺度电影无法无天| 一区二区三区日韩精品视频| 日本精品一区二区三区视频| 亚洲一区二区五区| 一区二区在线观| 蜜乳av一区二区三区| 欧美性videosxxxxx| 国产激情一区二区三区四区 | 一区二区成人在线| 视频一区视频二区视频三区高| 午夜在线成人av| 欧美这里有精品| 国产在线精品一区二区不卡了| 欧美日韩精品欧美日韩精品一| 国产伦精品一区二区三区免费迷| 91麻豆精品91久久久久久清纯 | xnxx国产精品| www.av一区视频| 亚洲精品国产无天堂网2021| 一区二区视频在线播放| 国产中文字幕一区| 久久丝袜美腿综合| 久久精品日产第一区二区三区精品版 | 一区二区不卡在线播放| 夜夜爽99久久国产综合精品女不卡| 蜜臀av一级做a爰片久久| 日韩一区二区免费在线观看| 国产精品国产三级欧美二区| 亚洲国产aⅴ天堂久久| 欧美亚洲综合色| av午夜一区麻豆| 夜夜嗨av一区二区三区中文字幕 | 免费成人深夜夜行视频| 亚洲h在线观看| 欧美一区二区日韩一区二区| 999在线免费观看视频| 亚洲国产精品一区二区久久| 7777精品伊人久久久大香线蕉的 | 色偷偷久久人人79超碰人人澡| 国产最新精品精品你懂的| 国产三级久久久| 一区二区精品国产| youjizz国产精品| 亚洲制服丝袜av| 日韩欧美在线一区二区三区| 欧美激情导航| 国产成人啪免费观看软件| 最好看的中文字幕久久| 欧美日韩高清影院| 精品婷婷色一区二区三区蜜桃| 另类的小说在线视频另类成人小视频在线| 欧美成人三级电影在线| 亚洲v国产v在线观看| 成人av网站在线观看| 午夜av一区二区| 国产午夜精品一区二区三区视频 | 国产婷婷色一区二区三区四区| 亚洲国产日韩美| 成人性生交大片免费看中文网站| 一区二区三区蜜桃| 91精品国产综合久久久蜜臀图片| 久久国产精品久久精品国产| 国产成人亚洲综合a∨婷婷图片 | 欧美专区日韩专区| 俄罗斯精品一区二区三区| 男女男精品视频网| 中文字幕亚洲综合久久菠萝蜜| 欧美日韩在线播放三区| 久久成人资源| av一区二区三区在线| 秋霞影院一区二区| 亚洲人成网站影音先锋播放| 日韩小视频在线观看专区| 亚洲高清在线观看一区| 99视频网站| 粉嫩av亚洲一区二区图片| 视频精品一区二区| 亚洲色图一区二区三区| xvideos.蜜桃一区二区| 欧美日韩一区视频| 亚洲一区二三| 欧美日韩中文国产一区发布| 99国产高清| 成人av免费网站| 久久国产精品第一页| 亚洲一区在线观看免费| 中文字幕一区在线观看视频| 精品日韩成人av| 欧美一区二区三区免费| 欧美性三三影院| 一区视频二区视频| 日本成人三级| 免费成人在线观看av| 国产精品精品软件视频| 97久久精品人人澡人人爽| 成人一区二区在线观看|