青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

無我

讓內(nèi)心永遠(yuǎn)燃燒著偉大的光明的精神之火!
靈活的思考,嚴(yán)謹(jǐn)?shù)膶?shí)現(xiàn)
豪邁的氣魄、頑強(qiáng)的意志和周全的思考

dll的概念、dll導(dǎo)出類(轉(zhuǎn))

dll的概念、dll導(dǎo)出類(轉(zhuǎn))

Posted on 2011-07-22 14:59 白耘 閱讀(875) 評(píng)論(0) 編輯 收藏 來源:http://www.cnblogs.com/whiteyun/archive/2011/07/22/2113668.html

1、 DLL的概念

DLL(Dynamic Linkable Library),動(dòng)態(tài)鏈接庫,可以向程序提供一些函數(shù)、變量或類。這些可以直接拿來使用。

靜態(tài)鏈接庫與動(dòng)態(tài)鏈接庫的區(qū)別:

 

(1)靜態(tài)鏈接庫與動(dòng)態(tài)鏈接庫都是共享代碼的方式。靜態(tài)鏈接庫把最后的指令都包含在最終生成的EXE文件中了;動(dòng)態(tài)鏈接庫不必被包含在最終EXE文件中,EXE文件執(zhí)行時(shí)可以“動(dòng)態(tài)”地引用和卸載這個(gè)與EXE獨(dú)立的DLL文件。

 

(2)靜態(tài)鏈接庫中不能再包含其他的動(dòng)態(tài)鏈接庫或者靜態(tài)庫,而在動(dòng)態(tài)鏈接庫中還可以再包含其他的動(dòng)態(tài)或靜態(tài)鏈接庫。

 

動(dòng)態(tài)鏈接庫的分類:Visual C++支持三種DLL,它們分別是:

(1)Non-MFC DLL(非MFC動(dòng)態(tài)庫)

非MFC動(dòng)態(tài)庫不采用MFC類庫結(jié)構(gòu),其導(dǎo)出函數(shù)為標(biāo)準(zhǔn)的C接口,能被非MFC或MFC編寫的應(yīng)用程序所調(diào)用;

 

(2)MFC Regular DLL(MFC規(guī)則DLL)

MFC規(guī)則DLL 包含一個(gè)繼承自CWinApp的類,但其無消息循環(huán);

 

(3)MFC Extension DLL(MFC擴(kuò)展DLL):MFC擴(kuò)展DLL采用MFC的動(dòng)態(tài)鏈接版本創(chuàng)建,它只能被用MFC類庫所編寫的應(yīng)用程序所調(diào)用。

 

2、 創(chuàng)建一個(gè)DLL

 

2.1 非MFC的DLL

 

2.1.1聲明導(dǎo)出函數(shù):

 

extern “C” __declspec(dllexport) int add(int a, int b);

 

其中 extern “C”為聲明為C編譯。由于C++編譯器在編譯的時(shí)候會(huì)造成其函數(shù)名的該變,在其他應(yīng)用程序中導(dǎo)致函數(shù)不可調(diào)用,而C編譯器則不會(huì)在編譯后改變其函數(shù)名。這樣如果用C編譯的程序來調(diào)用該dll中的函數(shù)時(shí),可能會(huì)造成找不到該函數(shù)。

 

__declspec(dllexport)表示該函數(shù)為DLL輸出函數(shù),即其他應(yīng)用程序可以調(diào)用該函數(shù)

 

從dll中聲明輸出函數(shù)有兩種方式:
(1) 用模塊定義(.def) 文件聲明,.def文件為鏈接器提供了有關(guān)被鏈接程序的導(dǎo)出、屬性及其他方面的信息。
(2) 用__declspec(dllexport)來聲明函數(shù)

 

如果使用Visual C++來創(chuàng)建dll,對(duì)于同樣用VC創(chuàng)建的exe來說,調(diào)用dll沒有什么問題。

而如果用其他工具來創(chuàng)建的exe來調(diào)用dll,就會(huì)出現(xiàn)問題。因?yàn)榧词鼓悴挥肅++編譯器,Microsoft C編譯器也會(huì)損害C函數(shù)。

當(dāng)用__stdcall將函數(shù)輸出時(shí),C編譯器會(huì)將函數(shù)改為_func@1的形式。在這里需要在.def文件中加入EXPORTS節(jié)來輸出函數(shù):

 

EXPORTS
func
這樣,dll將用func函數(shù)名來輸出函數(shù)。

 

另一種方式是用#pragma (linker, “/exports:func=_func@1”),告訴編譯器輸出函數(shù)func,這種方式?jīng)]有前一種好。

 

如果通過VC++編寫的DLL欲被其他語言編寫的程序調(diào)用應(yīng)將函數(shù)的調(diào)用方式聲明為__stdcall方式。

WINAPI都采用這種方式,而C/C++ 缺省的調(diào)用方式卻為__cdecl。__stdcall方式與__cdecl對(duì)函數(shù)名最終生成符號(hào)的方式不同。

若采用C編譯方式(在C++中需將函數(shù)聲明為extern "C"),__stdcall調(diào)用約定在輸出函數(shù)名前面加下劃線,后面加“@”符號(hào)和參數(shù)的字節(jié)數(shù),

形如_functionname@number;而__cdecl調(diào)用約定僅在輸出函數(shù)名前面加下劃線,形如_functionname。

 

lib.def : 導(dǎo)出DLL函數(shù)
LIBRARY dllTest
EXPORTS
add @ 1
.def文件的規(guī)則為:
   (1)LIBRARY語句說明.def文件相應(yīng)的DLL;
   (2)EXPORTS語句后列出要導(dǎo)出函數(shù)的名稱。可以在.def文件中的導(dǎo)出函數(shù)名后加@n,表示要導(dǎo)出函數(shù)的序號(hào)為n

(在進(jìn)行函數(shù)調(diào)用時(shí),這個(gè)序號(hào)將發(fā)揮其作用);

   (3).def 文件中的注釋由每個(gè)注釋行開始處的分號(hào) (;) 指定,且注釋不能與語句共享一行。
   由此可以看出,例子中l(wèi)ib.def文件的含義為生成名為“dllTest”的動(dòng)態(tài)鏈接庫,導(dǎo)出其中的add函數(shù),并指定add函數(shù)的序號(hào)為1。

 

2.1.2 Dll的調(diào)用方式: 

 

DLL的調(diào)用分為兩種方式:動(dòng)態(tài)和靜態(tài)顯示動(dòng)態(tài)鏈接隱式動(dòng)態(tài)鏈接)

 

(1) 動(dòng)態(tài)調(diào)用(顯示動(dòng)態(tài)鏈接):

typedef int(*lpAddFun)(int, int); //宏定義函數(shù)指針類型

lpAddFun add;//函數(shù)指針
HINSTANCE hDll=LoadLibrary(“path”);
add=(lpAddFun)GetProcAddress(hDll, "add");//獲得dll中的add函數(shù)指針
FreeLibrary(hDll);

 

在從dll調(diào)用中返回的函數(shù)、指針或者類都是以指針的方式的,即返回的是函數(shù)、變量或類的地址。這里一定要注意,不能簡單的用函數(shù)名來賦值。

 

(2) 靜態(tài)調(diào)用(隱式動(dòng)態(tài)鏈接):

將生成的.dll和.lib文件拷入到調(diào)用dll的工程中,用命令

#pragma comment(lib,"dllTest.lib"),實(shí)現(xiàn)靜態(tài)調(diào)用,即把該dll在編譯的時(shí)候也編譯到exe文件中去,而后在工程中調(diào)用時(shí)用下面的代碼:

 

#pragma comment(lib,"dllTest.lib")//.lib文件中僅僅是關(guān)于其對(duì)應(yīng)DLL文件中函數(shù)的重定位信息
extern "C" __declspec(dllimport) add(int x,int y);
int main(int argc, char* argv[])
{
int result = add(2,3);
printf("%d",result);
return 0;
}

 

   由上述代碼可以看出,靜態(tài)調(diào)用方式的順利進(jìn)行需要完成兩個(gè)動(dòng)作:
   (1) 告訴編譯器與DLL相對(duì)應(yīng)的.lib文件所在的路徑及文件名,#pragma comment(lib,"dllTest.lib")就是起這個(gè)作用。程序員在 建立一個(gè)DLL文件時(shí),連接器會(huì)自動(dòng)為其生成一個(gè)對(duì)應(yīng)的.lib文件,該文件包含了DLL 導(dǎo)出函數(shù)的符號(hào)名及序號(hào)(并不含有實(shí)際的代碼)。在應(yīng)用程序 里,.lib文件將作為DLL的替代文件參與編譯。另外一種顯式調(diào)用的方式是設(shè)置vc中的目錄和includefiles來實(shí)現(xiàn)

 

   (2) 聲明導(dǎo)入函數(shù),extern "C" __declspec(dllimport) add(int x,int y)語句中的__declspec(dllimport)發(fā)揮這個(gè)作 用。靜態(tài)調(diào)用方式不再需要使用系統(tǒng)API來加載、卸載DLL以及獲取DLL中導(dǎo)出函數(shù)的地址。這是因?yàn)椋?dāng)程序員通過靜態(tài)鏈接方式編譯生成應(yīng)用程序時(shí),應(yīng) 用程序中調(diào)用的與.lib文件中導(dǎo)出符號(hào)相匹配的函數(shù)符號(hào)將進(jìn)入到生成的EXE 文件中,.lib文件中所包含的與之對(duì)應(yīng)的DLL文件的文件名也被編譯器存儲(chǔ)在 EXE文件內(nèi)部。當(dāng)應(yīng)用程序運(yùn)行過程中需要加載DLL文件時(shí),Windows將根據(jù)這些信息發(fā)現(xiàn)并加載DLL,然后通過符號(hào)名實(shí)現(xiàn)對(duì)DLL 函數(shù)的動(dòng)態(tài)鏈接。這 樣,EXE將能直接通過函數(shù)名調(diào)用DLL的輸出函數(shù),就象調(diào)用程序內(nèi)部的其他函數(shù)一樣。

 

2.1.3 DllMain函數(shù)

 

Windows在加載dll的時(shí)候,會(huì)首先需要一個(gè)入口函數(shù)DllMain。當(dāng)在dll中不定義DllMain的時(shí)候,windows會(huì)從其他運(yùn)行庫中調(diào)用一個(gè)不做任何操作的DllMain函數(shù),直接返回true。DllMain是dll內(nèi)部的函數(shù),這意味著在調(diào)用dll的程序中不能顯式的調(diào)用。它是在 dll被調(diào)用時(shí)自動(dòng)被調(diào)用的。
 

BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)

{
switch (ul_reason_for_call)
{
case: DLL_PROCESS_ATTACH:
break;
case: DLL_THREAD_ATTACH:
break;
case: DLL_THREAD_DETACH:
break;
case: DLL_PROCESS_DETACH:
break;
return TRUE;
}

 

2.2 在dll中導(dǎo)出變量
1、在dll中定義變量 extern int global;
2、在.def中定義輸出 EXPORTS:
global DATA
3、 在應(yīng)用程序中調(diào)用:#pragma comment(lib,"dllTest.lib")
extern int global;
注意在此引入的變量global,是一個(gè)地址,在使用時(shí)需要強(qiáng)制轉(zhuǎn)化為指針后再用,才能得到其值。
(int *)global=10;
 

在應(yīng)用工程中引用DLL中全局變量的一個(gè)更好方法是:

extern int _declspec(dllimport) global; //用_declspec(dllimport)導(dǎo)入
通過_declspec(dllimport)方式導(dǎo)入的就是DLL中全局變量本身而不再是其地址了,建議在一切可能的情況下使用這種方式。

 

2.3 dll導(dǎo)出類
在定義的時(shí)候用

class _declspec(dllexport) classname{

}

 

在類中引用的時(shí)候用加入類定義頭文件:

 

#include “classname.h”

Class _declspec(dllimport) classname 來導(dǎo)入類

 

3、 MFC規(guī)則Dll
MFC規(guī)則DLL的概念體現(xiàn)在兩方面:
   (1) 它是MFC的
   “是MFC的” 意味著可以在這種DLL的內(nèi)部使用MFC;
(2) 它是規(guī)則的
“是規(guī)則的”意味著它不同于MFC擴(kuò)展DLL,在MFC規(guī)則DLL的內(nèi)部雖然可以使用MFC,但是其與應(yīng)用程序的接口不能是MFC。而MFC擴(kuò)展DLL與應(yīng)用程序的接口 可以是MFC,可以從MFC擴(kuò)展DLL中導(dǎo)出一個(gè)MFC類的派生類。
   Regular DLL能夠被所有支持DLL技術(shù)的語言所編寫的應(yīng)用程序調(diào)用,當(dāng)然也包括使用MFC的應(yīng)用程序。在這種動(dòng)態(tài)連接庫中,包含一個(gè)從CWinApp繼承下 來的類,DllMain函數(shù)則由MFC自動(dòng)提供。

 

(1)靜態(tài)鏈接到MFC 的規(guī)則DLL
   靜態(tài)鏈接到MFC的規(guī)則DLL與MFC庫(包括MFC擴(kuò)展 DLL)靜態(tài)鏈接,將MFC庫的代碼直接生成在.dll文件中。在調(diào)用這種DLL的接口時(shí),MFC使用DLL的資 源。因此,在靜態(tài)鏈接到MFC 的規(guī)則DLL中不需要進(jìn)行模塊狀態(tài)的切換。使用這種方法生成的規(guī)則DLL其程序較大,也可能包含重復(fù)的代碼。
(2)動(dòng)態(tài)鏈接到MFC 的規(guī)則DLL
   動(dòng)態(tài)鏈接到MFC 的規(guī)則DLL 可以和使用它的可執(zhí)行文件同時(shí)動(dòng)態(tài)鏈接到 MFC DLL 和任何MFC擴(kuò)展 DLL。在使用了MFC共享庫的時(shí)候,默認(rèn)情況下,MFC 使用主應(yīng)用程序的資源句柄來加載資源模板。這樣,當(dāng)DLL和應(yīng)用程序中存在相同ID的資源時(shí)(即所謂的資源重復(fù)問題),系統(tǒng)可能不能獲得正確的資源。因此,對(duì)于共 享MFC DLL的規(guī)則DLL,我們必須進(jìn)行模塊切換以使得MFC能夠找到正確的資源模板。

我們可以在Visual C++中設(shè)置MFC規(guī)則DLL是靜態(tài)鏈接到MFC DLL還是動(dòng)態(tài)鏈接到MFC DLL。如圖8,依次選擇Visual C++的project -> Settings -> General菜單或選項(xiàng),在Microsoft Foundation Classes中進(jìn)行設(shè)置。

 

3.1規(guī)則DLL的創(chuàng)建;

與非MFCdll不同的是,在其定義里面可以引入MFC類,其他與非MFC一樣
 

3.2規(guī)則DLL的調(diào)用

(1)顯示方式LoadLibrary , GetProcAdress , FreeLibrary

(2)我們照樣可以在EXE程序中隱式調(diào)用MFC規(guī)則DLL,只需要將DLL工程生成的.lib文件和.dll文件拷入當(dāng)前工程所在的目錄,并在cpp文件頂部添加:
#pragma comment(lib,"RegularDll.lib")
 

3.3共享MFC DLL的規(guī)則DLL的模塊切換

應(yīng)用程序進(jìn)程本身及其調(diào)用的每個(gè)DLL模塊都具有一個(gè)全局唯一的HINSTANCE句柄,它們代表了DLL或EXE模塊在進(jìn)程虛擬空間中的起始地址進(jìn)程本身的模塊句柄一般為0x400000而DLL模塊的缺省句柄為0x10000000如果程序同時(shí)加載了多個(gè)DLL,則每個(gè)DLL模塊都會(huì)有不同的 HINSTANCE應(yīng)用程序在加載DLL時(shí)對(duì)其進(jìn)行了重定位。
  共享MFC DLL(或MFC擴(kuò)展DLL)的規(guī)則DLL涉及到HINSTANCE句柄問題,HINSTANCE句柄對(duì)于加載資源特別重要。EXE和DLL都有其自己的資源,而且這些資源的ID可能重復(fù),應(yīng)用程序需要通過資源模塊的切換來找到正確的資源。如果應(yīng)用程序需要來自于DLL的資源,就應(yīng)將資源模塊句柄指定為 DLL的模塊句柄;如果需要EXE文件中包含的資源,就應(yīng)將資源模塊句柄指定為EXE的模塊句柄。

 

模塊的切換有三種方式:
(1)在DLL函數(shù)中調(diào)用:AFX_MANAGE_STATE(AfxGetStaticModuleState());(推薦使用,最簡單)
void ShowDlg(void)
{
//方法1:在函數(shù)開始處變更,在函數(shù)結(jié)束時(shí)恢復(fù)
//將AFX_MANAGE_STATE(AfxGetStaticModuleState());作為接口函數(shù)的第一//條語句進(jìn)行模塊狀態(tài)切換
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDialog dlg(IDD_DLL_DIALOG);//打開ID為2000的對(duì)話框
dlg.DoModal();
}
(2)在DLL函數(shù)中調(diào)用AfxGetResourceHandle();
AfxSetResourceHandle(HINSTANCE xxx);
(3)由應(yīng)用程序自身切換(不推薦,最麻煩)
 

4、擴(kuò)展MFCDLL

MFC擴(kuò)展DLL的內(nèi)涵為MFC的擴(kuò)展,用戶使用MFC擴(kuò)展DLL就像使用MFC本身的DLL一樣。除了可以在MFC擴(kuò)展DLL的內(nèi)部使用MFC以外, MFC擴(kuò)展DLL與應(yīng)用程序的接口部分也可以是MFC。我們一般使用MFC擴(kuò)展DLL來包含一些MFC的增強(qiáng)功能,譬如擴(kuò)展MFC的CStatic、 CButton等類使之具備更強(qiáng)大的能力。
導(dǎo)出一個(gè)類,直接在類聲明頭文件中使用AFX_EXT_CLASS即可,最后別忘了在調(diào)用dll的程序中加入class的頭文件

 

5、總結(jié):
綜上所述:以上幾種dll主要由以下幾種區(qū)別:
 

1、動(dòng)態(tài)鏈接庫是將exe程序在程序執(zhí)行的時(shí)候動(dòng)態(tài)加載的,而靜態(tài)鏈接庫是在編譯的時(shí) 將其編譯在代碼之中的

2、動(dòng)態(tài)鏈接庫可以輸出變量、函數(shù)和類。其中每種輸出的方式與調(diào)用方式不盡相同:

 

(1)變量:在dll中定義 extern int global;
在.def文件中輸出 EXPORTS
global DATA
或extern _declspec(dllexport)int global(不用輸出文件了)
在程序中調(diào)用:
靜態(tài)調(diào)用:

#pragma comment(lib,"dllTest.lib")

extern int _declspec(dllimport) global;
動(dòng)態(tài)調(diào)用:
 

(2)函數(shù):在dll中定義

extern “C” __declspec(dllexport) int add(int a, int b);
也可以在.def文件中輸出該函數(shù)
EXPORTS
add @ 1
在程序中調(diào)用:
靜態(tài)調(diào)用:
#pragma comment(lib,"dllTest.lib")
extern "C" __declspec(dllimport) add(int x,int y);
動(dòng)態(tài)調(diào)用:
typedef int(*lpAddFun)(int, int); //宏定義函數(shù)指針類型
lpAddFun add;//函數(shù)指針
HINSTANCE hDll=LoadLibrary(“path”);
add=(lpAddFun)GetProcAddress(hDll, "add");//獲得dll中的add函數(shù)指針
FreeLibrary(hDll);
在從dll調(diào)用中返回的函數(shù)、指針或者類都是以指針的方式會(huì)的,即返回的是函數(shù)、變量或類的地址。這里一定要注意,不能簡單的用函數(shù)名來賦值。
(3)類:在dll中定義:
在定義的時(shí)候用 class _declspec(dllexport) classname{
}
在類中引用的時(shí)候用
加入類定義頭文件:#include “classname.h”
Class _declspec(dllimport) classname 來導(dǎo)入類
3、除了擴(kuò)展MFC的dll外,其他的dll均可被其他語言編寫的應(yīng)用程序來調(diào)用。

 

posted on 2012-05-09 14:34 Tim 閱讀(2815) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 資源共享C/C++語言

<2012年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

導(dǎo)航

統(tǒng)計(jì)

公告

本博客原創(chuàng)文章,歡迎轉(zhuǎn)載和交流。不過請(qǐng)注明以下信息:
作者:TimWu
郵箱:timfly@yeah.net
來源:m.shnenglu.com/Tim
感謝您對(duì)我的支持!

留言簿(9)

隨筆分類(173)

IT

Life

搜索

積分與排名

最新隨筆

最新評(píng)論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产伦精品免费视频| 99热精品在线观看| 在线精品视频免费观看| 国产亚洲精品资源在线26u| 国产精品裸体一区二区三区| 国产精品视频久久| 国产日韩欧美精品| 一区二区三区中文在线观看| 亚洲电影天堂av| 99av国产精品欲麻豆| 亚洲永久精品国产| 久久蜜桃精品| 亚洲国产精品成人| 国产精品家庭影院| 国产精品美女久久久久久久| 狠狠88综合久久久久综合网| 亚洲欧洲综合另类| 性欧美8khd高清极品| 久久亚洲精选| 亚洲精品国产精品国自产观看| 国产精品99久久久久久久女警| 欧美一区三区二区在线观看| 牛牛国产精品| 国产精品视频免费一区| 在线观看不卡av| 午夜精品福利一区二区三区av| 免费观看欧美在线视频的网站| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲欧美不卡| 久久综合色播五月| 国产精品一二三| 亚洲日本成人女熟在线观看| 欧美一区二区三区日韩| 亚洲激情国产| 久久综合狠狠综合久久综合88| 国产精品自在在线| 在线一区二区三区四区五区| 葵司免费一区二区三区四区五区| 在线一区视频| 欧美日韩大片一区二区三区| 精久久久久久| 久久精品一本久久99精品| 亚洲精品综合久久中文字幕| 久热这里只精品99re8久| 国产午夜精品全部视频播放| 久久精品视频播放| 国产精品99久久久久久久女警| 麻豆九一精品爱看视频在线观看免费 | 日韩一级免费| 久久伊人精品天天| 国产在线乱码一区二区三区| 午夜久久一区| 亚洲香蕉视频| 国产精品久久影院| 亚洲欧美日韩在线| 这里只有精品视频在线| 欧美日韩免费观看一区三区| 亚洲最新在线视频| 亚洲精品乱码久久久久久日本蜜臀 | 国内精品久久久久影院薰衣草 | 亚洲国产精品黑人久久久| 久久gogo国模啪啪人体图| 国产日产亚洲精品| 欧美亚洲网站| 午夜亚洲福利| 国语自产偷拍精品视频偷| 久久久久久午夜| 久久久精品国产一区二区三区| 黄色成人在线网址| 欧美成人免费播放| 欧美寡妇偷汉性猛交| 99精品视频网| 宅男噜噜噜66一区二区66| 国产精品视频yy9099| 久久国产毛片| 久久综合九色综合久99| 亚洲人成网站精品片在线观看| 亚洲激情视频网| 欧美视频在线观看免费| 欧美一区二区三区电影在线观看| 欧美一区成人| 亚洲精品久久久久久久久| 日韩午夜三级在线| 国产麻豆精品在线观看| 麻豆精品一区二区综合av | 欧美精品二区三区四区免费看视频| 亚洲美女精品成人在线视频| 中文高清一区| 狠色狠色综合久久| 亚洲国产三级| 国产精品一区二区视频| 免费在线看成人av| 欧美日韩裸体免费视频| 性色av一区二区三区红粉影视| 亚洲美女电影在线| 一区二区三区精密机械公司| 国产在线观看一区| 亚洲激情av在线| 狠狠色丁香久久婷婷综合丁香| 亚洲激情专区| 国外成人在线| 日韩午夜在线视频| 国产综合视频在线观看| 亚洲乱码一区二区| 国产色综合网| 亚洲伦伦在线| 精品动漫3d一区二区三区免费版 | 欧美本精品男人aⅴ天堂| 亚洲性色视频| 久久日韩粉嫩一区二区三区| 亚洲视频在线观看视频| 久久九九精品| 香蕉久久国产| 欧美激情一区二区三区在线视频| 午夜视黄欧洲亚洲| 欧美另类69精品久久久久9999| 久久久亚洲国产美女国产盗摄| 欧美日韩成人在线观看| 欧美国产日韩视频| 国产亚洲欧美日韩一区二区| 亚洲另类一区二区| 91久久夜色精品国产九色| 欧美一二区视频| 亚洲自拍电影| 欧美午夜大胆人体| 亚洲精品国产品国语在线app| 亚洲激情女人| 久久婷婷成人综合色| 久久久999| 国产亚洲成人一区| 亚洲一区区二区| 亚洲欧美日韩人成在线播放| 欧美深夜福利| 国产精品99久久久久久www| 一区二区三区视频在线| 欧美日本久久| 99v久久综合狠狠综合久久| 中文网丁香综合网| 欧美日韩精品二区| 9人人澡人人爽人人精品| 国产精品99久久久久久有的能看| 欧美激情麻豆| 亚洲精品麻豆| 亚洲一区二区三区在线| 欧美视频一区二区在线观看| 宅男噜噜噜66一区二区 | 欧美mv日韩mv亚洲| 亚洲国产精品成人综合| 欧美成人免费在线| 亚洲国产精品99久久久久久久久| 亚洲国产一区二区视频| 欧美精品一区二区在线观看| 亚洲精品激情| 性欧美长视频| 揄拍成人国产精品视频| 麻豆精品网站| 国产精品免费网站在线观看| 久久本道综合色狠狠五月| 国产精品自在欧美一区| 欧美专区在线播放| 欧美ab在线视频| 亚洲精品日韩一| 欧美三级免费| 亚洲欧美日韩在线播放| 老司机一区二区| 亚洲靠逼com| 国产精品国产三级国产专播精品人 | 亚洲一区二区三区国产| 久久精品国产精品亚洲| 亚洲第一综合天堂另类专| 欧美二区乱c少妇| 亚洲视频axxx| 久久亚洲私人国产精品va媚药| 亚洲电影免费在线观看| 欧美日本精品| 久久精品一区蜜桃臀影院| 亚洲三级免费| 久久久亚洲影院你懂的| 亚洲毛片在线观看| 国产欧美精品xxxx另类| 欧美1区2区| 性欧美超级视频| 亚洲精品国产视频| 久久嫩草精品久久久精品一| 日韩午夜视频在线观看| 激情成人综合| 国产精品久久久999| 美女视频网站黄色亚洲| 亚洲图片欧洲图片av| 欧美大秀在线观看| 久久久精品欧美丰满| 亚洲视频精选| 亚洲欧洲一二三| 国产亚洲免费的视频看| 欧美日韩国产片| 欧美大片在线影院| 久久国产精品亚洲77777| 一区二区三区免费看| 欧美国产亚洲视频| 久久综合久色欧美综合狠狠|