日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【VS开发】这就是COM组件

發布時間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【VS开发】这就是COM组件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[實例]這就是COM組件

時間?2012-02-21 10:49:15??CSDN博客 原文??http://blog.csdn.net/btwsmile/article/details/7278492 主題?COM技術

[實例]這就是COM組件

Author: ume Date:2012-02-21

??? 自從微軟推出.NET以來,COM技術就漸漸淡出人們的視野,然而這并不意味COM不再發揮作用,相反,COM非常重要??梢哉f.NET的實現離不開COM的支撐。COM是好東西,但是它太難了,不利于產品推廣,于是微軟只能在之上增加一層封裝從而提高產品的易用性。對COM有所了解是很有必要的,希望這篇文章給你帶來一點啟發。

1. COM的思想

??? 開篇就講COM的思想肯定讓人泄氣,因為它極有可能抽象空洞、晦澀難懂。換個角度來說,我覺得COM的思想仍然是需要自己去體會的,這里給出的不過是一個思考的線索而已,你大可不求甚解。

??? 軟件的開發是永無止境的,只要軟件還在存活期,它就應當不斷被完善和更新。一款軟件可能十分龐大,但真正可變的部分卻是很有限的。我們當然希望在更新軟件的時候,只更新變化的部分,而不要笨手笨腳把整個軟件都換掉。只更新變化的部分?這就要求模塊支持動態鏈接。所謂動態鏈接就是模塊只在被使用的時候才被加載,程序調用模塊中的某個函數是通過指針來完成的。動態鏈接允許模塊分離出去,而不像靜態鏈接那樣須經過編譯才能整合到程序中來。dll是實現動態鏈接的一種方法,它使更新軟件的工作濃縮成了更新dll,用戶無需重新安裝軟件,只需替換相應的dll文件就能實現軟件的升級。

??? 動態鏈接是針對普通用戶而言的,現在換一個對象:模塊的用戶。模塊的用戶是應用程序開發人員,對于模塊的提供商來說也算得上同行了,只不過術業有專攻,各自工作的重點不同而已。顯然采用dll的形式,模塊的提供商可以很方便的發布自己的產品。其中不可忽視的另一點即信息的封裝(或稱隱藏),即將模塊的實現細節隱蔽起來,用戶無法知道模塊的提供商采用何種語言、何種算法,簡而言之就是用戶看不到模塊的源代碼。dll是二進制級別上的代碼復用,它實現了信息的封裝。

??? 綜上所述,軟件開發要求模塊支持“動態鏈接”和“信息封裝”,更直白地說就是要求模塊和客戶代碼之間更低的耦合度。把模塊制作成組件是必然的選擇,而COM本質上是一種創建組件的方法和規范。

??? 注:dll并不等同于組件,它只是組件的一種形式。由于dll的易用性,它的應用很廣泛。

2. 實例說明

??? 我們創建一個COM組件,它將實現接口ICouplet,用戶可通過該接口調用what()方法輸出一副對聯。what()方法不值一提,不過你可以將它當作程序可變的部分。我們創建的COM組件也要實現接口IClassFactory,它是創建組件的簡單組件。之所以這么設計是為了讓組件與客戶代碼徹底脫耦,盡可能少的聯系。

??? 除了實現接口ICouplet和IClassFactory外, COM組件還要能實現自注冊,因此它必須導出函數DllRegister/DllUnregister。另外兩個導出函數DllCanUnloadNow和DllGetClassObject也非常重要,前者用來詢問當前dll能否被卸載,它被CoFreeUnusedLibraries調用;后者用來創建類廠組件,它被CoCreateInstance調用。名稱形如Coxxx的函數是COM庫函數,它是實現COM組件的公共操作,由微軟提供,類似于Win32 API。我們常見的客戶代碼中CoInitialize/CoUninitialize函數就起到初始化和卸載COM庫的作用。要導出上述4個函數就必須編寫一個.def文件,具體寫法見代碼清單。

??? 最后要說明的是COM組件的自注冊。我們知道注冊表是Windows的公共系統數據庫,其中記錄了軟件、硬件、用戶配置等信息。而COM組件是用一個128比特的GUID標識的,為了使得COM組件的安裝目錄更靈活,我們可以在注冊表中對它進行注冊,注冊的主要信息即COM組件的GUID標識與其存儲路徑的對應關系,在使用該組件時就到注冊表中去查找。注冊一個COM組件一般使用regsvr32.exe程序來完成,當然你也可以自己寫一個類似于regsvr32.exe的小程序來完成COM組件的注冊,regsvr32.exe本質上調用了組件的導出函數DllRegister/DllUnregister。

??? 生成Couplet.dll文件后,首先在控制臺注冊它。具體方法:切換到Couplet.dll所在目錄,輸入指令regsvr32 Couplet.dll。然后運行客戶程序Reader.exe,其結果如下所示:

Create Couplet object Succeeded in getting the pointer to ICouplet1st Scroll: Study Hard, Work Hard, Make Money More and More 2nd Scroll: Eat Well, Sleep Well, Have Fun Day by Day Top Scroll: GelievableCouplet object deleted 請按任意鍵繼續. . .

????然后修改Couplet::what()方法,讓它輸出中文,重新生成Couplet.dll。這一步不用重新注冊Couplet.dll,因為Couplet.dll的路徑沒變,CLSID_Couplet也沒變。運行客戶程序Reader.exe,其結果如下所示:

CreateCouplet objectSucceededin getting the pointer to ICouplet上聯:我愛的人名花有主下聯:愛我的人慘不忍睹橫批:命苦Coupletobject deleted請按任意鍵繼續. . .

????這個例子證明了COM組件的更新不會對客戶端造成影響,使用COM組件可以實現模塊與客戶代碼徹底脫耦。實驗結束后,在控制臺輸入指令regsvr32 /u Couplet.dll,從注冊表中將dll模塊信息清除。

3. 代碼清單

/* File List: (COM) IFace.h Register.h Register.cpp Couplet.cpp Couple.def* (Client) IFace.h Reader.cpp* date: 2012-02-21* author: ume*/ ///////////////////////////////////////////////////////////////// // IFace.h 接口的聲明,組件ID、接口ID的定義 // #include <ObjBase.h> // interface interface ICouplet : IUnknown {virtual void what() = 0; }; // GUIDs // {03844548-B0B9-4B12-869D-061AAE2E4B7F} static const GUID IID_ICouplet = { 0x3844548, 0xb0b9, 0x4b12, { 0x86, 0x9d, 0x6, 0x1a, 0xae, 0x2e, 0x4b, 0x7f } }; // {26615B48-1D2E-4A40-9C07-AD5B1B48368C} static const GUID CLSID_Couplet = { 0x26615b48, 0x1d2e, 0x4a40, { 0x9c, 0x7, 0xad, 0x5b, 0x1b, 0x48, 0x36, 0x8c } }; ///////////////////////////////////////////////////////////////// // Register.h 注冊函數的聲明 // HRESULT RegisterServer(HMODULE hModule, const CLSID& clsid, const char* szFriendlyName, const char* szVerIndProgID, const char* szProgID); HRESULT UnRegisterServer(const CLSID& clsid, const char* szVerIndProgID, const char* szProgID); ///////////////////////////////////////////////////////////////// // Register.cpp 注冊函數的定義 // 這些函數可重復使用,非本文重點 // #include <objbase.h> #include "Register.h" //set the given key and its value; BOOL setKeyAndValue(const char* pszPath,const char* szSubkey,const char* szValue); //Convert a CLSID into a char string void CLSIDtochar(const CLSID& clsid,char* szCLSID,int length); //Delete szKeyChild and all of its descendents LONG recursiveDeleteKey(HKEY hKeyParent,const char* szKeyChild); //size of a CLSID as a string const int CLSID_STRING_SIZE = 39; //Register the component in the registry HRESULT RegisterServer(HMODULE hModule,const CLSID& clsid,const char* szFriendlyName,const char* szVerIndProgID,const char* szProgID) {//Get the Server locationchar szModule[512];DWORD dwResult = ::GetModuleFileName(hModule,szModule,sizeof(szModule)/sizeof(char));assert(dwResult!=0);//Convert the CLSID into a charchar szCLSID[CLSID_STRING_SIZE];CLSIDtochar(clsid,szCLSID,sizeof(szCLSID));//Build the key CLSID\\{}char szKey[64];strcpy(szKey,"CLSID\\");strcat(szKey,szCLSID);//Add the CLSID to the registrysetKeyAndValue(szKey,NULL,szFriendlyName);//Add the Server filename subkey under the CLSID keysetKeyAndValue(szKey,"InprocServer32",szModule);setKeyAndValue(szKey,"ProgID",szProgID);setKeyAndValue(szKey,"VersionIndependentProgID",szVerIndProgID);//Add the version-independent ProgID subkey under HKEY_CLASSES_ROOTsetKeyAndValue(szVerIndProgID,NULL,szFriendlyName);setKeyAndValue(szVerIndProgID,"CLSID",szCLSID);setKeyAndValue(szVerIndProgID,"CurVer",szProgID);//Add the versioned ProgID subkey under HKEY_CLASSES_ROOTsetKeyAndValue(szProgID,NULL,szFriendlyName);setKeyAndValue(szProgID,"CLSID",szCLSID);return S_OK; }// //Remove the component from the register // HRESULT UnRegisterServer(const CLSID& clsid, // Class IDconst char* szVerIndProgID, // Programmaticconst char* szProgID) // IDs {//Convert the CLSID into a char.char szCLSID[CLSID_STRING_SIZE];CLSIDtochar(clsid,szCLSID,sizeof(szCLSID));//Build the key CLSID\\{}char szKey[64];strcpy(szKey,"CLSID\\");strcat(szKey,szCLSID);//Delete the CLSID key - CLSID\{}LONG lResult = recursiveDeleteKey(HKEY_CLASSES_ROOT,szKey);assert((lResult == ERROR_SUCCESS) || (lResult == ERROR_FILE_NOT_FOUND));//Delete the version-independent ProgID KeylResult = recursiveDeleteKey(HKEY_CLASSES_ROOT,szVerIndProgID);assert((lResult == ERROR_SUCCESS) || (lResult == ERROR_FILE_NOT_FOUND));//Delete the ProgID key.lResult = recursiveDeleteKey(HKEY_CLASSES_ROOT,szProgID);assert((lResult == ERROR_SUCCESS) || (lResult == ERROR_FILE_NOT_FOUND));return S_OK; } //Convert a CLSID to a char string void CLSIDtochar(const CLSID& clsid,char* szCLSID,int length) {assert(length>=CLSID_STRING_SIZE);//Get CLSIDLPOLESTR wszCLSID = NULL;HRESULT hr = StringFromCLSID(clsid,&wszCLSID);assert(SUCCEEDED(hr));//Convert from wide characters to non_widewcstombs(szCLSID,wszCLSID,length);//Free memoryCoTaskMemFree(wszCLSID); } // Delete a Key and all of its descendents LONG recursiveDeleteKey(HKEY hKeyParent,const char* lpszKeyChild) {//Open the child.HKEY hKeyChild;LONG lRes = RegOpenKeyEx(hKeyParent,lpszKeyChild,0,KEY_ALL_ACCESS,&hKeyChild);if(lRes != ERROR_SUCCESS)return lRes;//Enumerate all of the decendents of this childFILETIME time;char szBuffer[256];DWORD dwSize = 256 ;while(RegEnumKeyEx(hKeyChild,0,szBuffer,&dwSize,NULL,NULL,NULL,&time) == S_OK){//Delete the decendents of this child.lRes = recursiveDeleteKey(hKeyChild,szBuffer);if(lRes != ERROR_SUCCESS){RegCloseKey(hKeyChild);return lRes;}dwSize = 256;}RegCloseKey(hKeyChild);return RegDeleteKey(hKeyParent,lpszKeyChild); }BOOL setKeyAndValue(const char* szKey,const char* szSubkey,const char* szValue) {HKEY hKey;char szKeyBuf[1024];//Copy keyname into buffer.strcpy(szKeyBuf,szKey);//Add subkey name to buffer.if(szSubkey!=NULL){strcat(szKeyBuf,"\\");strcat(szKeyBuf,szSubkey);}// Create and open key and subkey.long lResult = RegCreateKeyEx(HKEY_CLASSES_ROOT ,szKeyBuf, 0, NULL, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, NULL, &hKey, NULL) ;if (lResult != ERROR_SUCCESS){return FALSE ;}// Set the Value.if (szValue != NULL){RegSetValueEx(hKey, NULL, 0, REG_SZ, (BYTE *)szValue, strlen(szValue)+1) ;}RegCloseKey(hKey) ;return TRUE ; } ///////////////////////////////////////////////////////////////// // Couplet.cpp 接口的實現 // 本文的重點,尤其是Couplet和CFactory的實現 // #include "IFace.h" #include "Register.h" #include <iostream> using namespace std; // trace void trace(const char* msg) { cout<<msg<<endl; } // global variables HMODULE g_hModule; static long g_cComponents = 0; static long g_cLocks = 0; // Friendly name of component const char g_szFriendlyName[] = "A Couplet"; // Version independent ProgID const char g_szVerIndProgID[] = "Couplet.Test"; // ProgID const char g_szProgID[] = "Couplet.Test.1"; // implementation class Couplet : public ICouplet { public:virtual LRESULT __stdcall QueryInterface(const IID& iid, void** ppv);virtual ULONG __stdcall AddRef(){return ::InterlockedIncrement(&m_cRef);}virtual ULONG __stdcall Release(){if(::InterlockedDecrement(&m_cRef) == 0){delete this;return 0;}return m_cRef;}virtual void what() { //cout<<"\n上聯:我愛的人名花有主\n下聯:愛我的人慘不忍睹\n橫批:命苦\n\n"; cout<<"\n1st Scroll: Study Hard, Work Hard, Make Money More and More\n\ 2nd Scroll: Eat Well, Sleep Well, Have Fun Day by Day\nTop Scroll: Gelievable\n\n"; }// constructorCouplet() : m_cRef(1) {::InterlockedIncrement(&g_cComponents);trace("Create Couplet object"); }// destructor~Couplet(){::InterlockedDecrement(&g_cComponents);trace("Couplet object deleted");} private:long m_cRef; }; // definition of QueryInterface LRESULT __stdcall Couplet::QueryInterface(const IID& iid, void** ppv) {if((iid == IID_IUnknown) || (iid == IID_ICouplet)){*ppv = static_cast<ICouplet*>(this);}else{*ppv = NULL;return E_NOINTERFACE;}static_cast<IUnknown*>(*ppv)->AddRef();return S_OK; } // class CFactory class CFactory : public IClassFactory { public:virtual LRESULT __stdcall QueryInterface(const IID& iid, void** ppv);virtual ULONG __stdcall AddRef(){return ::InterlockedIncrement(&m_cRef);}virtual ULONG __stdcall Release(){if(::InterlockedDecrement(&m_cRef) == 0){delete this;return 0;}return m_cRef;}virtual LRESULT __stdcall CreateInstance(IUnknown* pCmpntOuter,const IID& iid,void** ppv);virtual LRESULT __stdcall LockServer(BOOL bLock); private:long m_cRef; }; // definition of QueryInterface LRESULT __stdcall CFactory::QueryInterface(const IID& iid, void** ppv) {if((iid == IID_IUnknown) || (iid == IID_IClassFactory)){*ppv = static_cast<IClassFactory*>(this);}else{*ppv = NULL;return E_NOINTERFACE;}static_cast<IUnknown*>(*ppv)->AddRef();return S_OK; } // definition of CreateInstance LRESULT __stdcall CFactory::CreateInstance(IUnknown* pCmpntOuter,const IID& iid,void** ppv) {if(pCmpntOuter != NULL){cout<<"No Aggregate in this Class Factory"<<endl;return CLASS_E_NOAGGREGATION;}Couplet* pCouplet = new Couplet;if(pCouplet == NULL)return E_OUTOFMEMORY;HRESULT hr = pCouplet->QueryInterface(iid, ppv);pCouplet->Release();return hr; } // definition of LockServer LRESULT __stdcall CFactory::LockServer(BOOL bLock) {if(bLock){::InterlockedIncrement(&g_cLocks);}else{::InterlockedDecrement(&g_cLocks);}return S_OK; } STDAPI DllCanUnloadNow() {if((g_cComponents == 0) && (g_cLocks == 0)){return S_OK;}else{return S_FALSE;} } // Get class factory STDAPI DllGetClassObject(const CLSID& clsid,const IID& iid,void** ppv) {// Can we create this component?if(clsid != CLSID_Couplet){return CLASS_E_CLASSNOTAVAILABLE;}// Create class factoryCFactory* pFactory = new CFactory;if(pFactory == NULL){return E_OUTOFMEMORY;}// Get requested interfaceHRESULT hr = pFactory->QueryInterface(iid, ppv);pFactory->Release();return hr; } // register and unregister component STDAPI DllRegisterServer() {return RegisterServer(g_hModule,CLSID_Couplet,g_szFriendlyName,g_szVerIndProgID,g_szProgID); } STDAPI DllUnregisterServer() {return UnRegisterServer(CLSID_Couplet,g_szVerIndProgID,g_szProgID); } // dll main BOOL APIENTRY DllMain(HANDLE hModule,DWORD dwReason,void* lpReserved) {if(dwReason == DLL_PROCESS_ATTACH){g_hModule = (HMODULE)hModule;}return TRUE; } ///////////////////////////////////////////////////////////////// // Couplet.def 模塊定義文件 // LIBRARY Couplet.dll EXPORTSDllCanUnloadNow @1 PRIVATEDllGetClassObject @2 PRIVATEDllRegisterServer @3 PRIVATEDllUnregisterServer @4 PRIVATE ///////////////////////////////////////////////////////////////// // Reader.cpp 通過ICouplet接口調用what()方法讀取對聯內容 // 注意: 客戶端的IFace.h與COM組件中的IFace.h完全一樣 // #include <iostream> #include <ObjBase.h> #include "IFace.h" using namespace std; // global function void trace(const char* pMsg){ cout<<pMsg<<endl; } // main function int main() {::CoInitialize(NULL);ICouplet* pICouplet = NULL;HRESULT hr = ::CoCreateInstance(CLSID_Couplet, NULL, CLSCTX_INPROC_SERVER, IID_ICouplet, (void**)&pICouplet);if(SUCCEEDED(hr)){trace("Succeeded in getting the pointer to ICouplet");pICouplet->what();pICouplet->Release();}else {trace("Failed to get the pointer to ICouplet");}::CoUninitialize();system("pause");return 0; }

轉載于:https://www.cnblogs.com/huty/p/8518744.html

總結

以上是生活随笔為你收集整理的【VS开发】这就是COM组件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

欧美色噜噜 | 天天干天天做天天爱 | 日韩在线网址 | 天天干天天操天天搞 | 国产精品午夜久久久久久99热 | 狠狠色狠狠色综合日日92 | 亚洲成人免费在线 | www.99av| 国产一级黄色免费看 | av高清不卡| 亚洲永久精品在线 | 国产一区在线免费 | 亚洲天堂香蕉 | 国产精品久久9 | 久久看免费视频 | 日韩高清不卡一区二区三区 | 天天爱天天色 | 欧美精品天堂 | 日韩乱色精品一区二区 | 在线播放精品一区二区三区 | 人人人爽 | 99色在线观看 | 蜜臀av一区 | 日韩电影精品 | 911国产| 免费看黄网站在线 | 国产喷水在线 | 亚洲成av人片在线观看 | 久久精品www人人爽人人 | 天天操操操操操 | 久久久精品网 | 亚洲欧美日本国产 | 在线看一区 | 久久国产视屏 | 懂色av一区二区在线播放 | av中文在线观看 | 天天干天天插 | 超碰人在线 | 亚洲精品18p | 国产精品久久久久久久电影 | 中文字幕精品一区久久久久 | 96av在线视频| 中文字幕999 | 国产精品99久久久久久小说 | www.久久精品视频 | 96在线| 免费三级影片 | 久久免费在线观看 | 夜夜嗨av色一区二区不卡 | 国产99久久久国产精品免费二区 | 欧美va天堂va视频va在线 | 一区二区三区免费 | 精品福利视频在线 | 国产精品美女久久久久久网站 | 久久五月婷婷丁香社区 | 日韩欧美精品在线观看 | 四虎成人免费观看 | 99热这里只有精品8 久久综合毛片 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 激情丁香综合五月 | 国产第一页在线播放 | 欧美日韩一区三区 | 国产男女免费完整视频 | 黄色亚洲免费 | 日日干av | 日韩高清dvd | 精品中文字幕在线观看 | 久久久国产精品人人片99精片欧美一 | 久久久久久草 | 27xxoo无遮挡动态视频 | 91视频a | 精品亚洲视频在线 | 日韩精品一区二区在线观看 | 日韩在线免费小视频 | 狠狠搞,com | 国产91精品久久久久久 | 久草在线资源免费 | 丁香高清视频在线看看 | 国产系列精品av | 免费看的视频 | 91亚瑟视频 | 国产精品毛片一区 | 久草视频免费播放 | 欧美日韩免费一区二区三区 | 99久久精品久久亚洲精品 | 日韩欧美一区二区三区在线 | 国产精品黄色影片导航在线观看 | 日本公妇色中文字幕 | 婷婷丁香七月 | 天天se天天cao天天干 | 久久人人看 | 欧美大荫蒂xxx | 精品久久久影院 | 六月激情| 亚洲视频久久久久 | 久久久久电影 | 2019天天干天天色 | 91精品国产91p65 | 国产aaa免费视频 | 免费在线日韩 | 视频国产一区二区三区 | 国产精品久久亚洲 | 91高清免费在线观看 | 91视频在线免费 | 99久久99久久综合 | 91porny九色91啦中文 | 91精品网站 | 日日干日日 | 99久久精品日本一区二区免费 | 91九色蝌蚪在线 | 在线国产福利 | www.夜夜夜| 婷婷精品在线 | 青青河边草免费观看 | 最近中文字幕高清字幕在线视频 | 色姑娘综合网 | 久久无码精品一区二区三区 | 亚洲视频观看 | 欧美日韩在线观看一区 | 久久麻豆视频 | 在线免费精品视频 | 国产在线不卡视频 | 视频99爱| 国产99一区视频免费 | 日日爱网站 | 9i看片成人免费看片 | 日韩av免费一区二区 | 亚洲精品一区二区三区高潮 | 国产小视频在线免费观看视频 | av无限看 | 青春草视频在线播放 | 国产精品久久久久久一二三四五 | 色网站免费在线观看 | 97综合在线 | 国产亚洲精品久久久久久网站 | 午夜精品999 | 精品国产一区二区三区久久影院 | 在线视频电影 | 亚洲精品一区二区在线观看 | 久草电影免费在线观看 | 97偷拍在线视频 | 免费视频一区二区 | 国产精品成人aaaaa网站 | 偷拍精品一区二区三区 | 久久av网 | 免费看的黄色录像 | 天天操一操| 久久久久久国产精品 | 亚洲久草网 | 特级毛片在线免费观看 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 成人夜晚看av| 丁香五香天综合情 | 天堂av在线网 | 天天色天天艹 | 天天干天天干天天 | 国产精品久久久久久久妇 | 欧美一区二区免费在线观看 | 一本一本久久a久久精品综合 | 亚洲国产av精品毛片鲁大师 | 五月婷婷综合激情网 | www.黄色片网站 | av成人动漫在线观看 | 欧美日韩视频在线一区 | 丁香网婷婷| av丝袜美腿| 国产精品 国内视频 | 亚洲精品国产日韩 | 国产精品视频永久免费播放 | 久久视频在线 | 国产99久久九九精品免费 | 日批网站免费观看 | 欧美91精品久久久久国产性生爱 | 亚洲精品国产成人 | 国产精品久久久久国产精品日日 | www.天天操| 国产中文字幕视频在线 | 免费网站色 | 狠狠操操 | 日韩久久精品一区二区三区下载 | 在线观看完整版免费 | 国产成人精品一区二区三区免费 | av网站在线免费观看 | 91精品国产福利在线观看 | 久久婷婷国产色一区二区三区 | 日韩爱爱网站 | av手机版 | 日韩欧美极品 | 伊人国产在线播放 | 久久久久亚洲a | 欧美日韩69 | 国产色就色| 日韩久久久久久久久久久久 | 国产精品免费久久久久久 | 天堂va欧美va亚洲va老司机 | 国产三级视频 | 97人人精品 | 欧美9999 | 久久手机看片 | 欧美成人黄| 婷婷色综合 | 日韩激情免费视频 | 九九视频这里只有精品 | 丁香一区二区 | 日韩国产精品久久 | 久草在线免费资源 | 色婷婷在线视频 | 91精品婷婷国产综合久久蝌蚪 | 国产精品久久久久久久免费大片 | 色小说av| 国产成人精品一二三区 | 日韩免费一二三区 | 狠狠干美女 | 久久嗨 | 国产亚洲欧美一区 | 亚洲涩涩涩 | 一本一道久久a久久精品蜜桃 | 国产成人333kkk| 国产在线精品观看 | 日本三级在线观看中文字 | 亚洲成人资源在线 | 亚洲高清激情 | 国产vs久久| 黄色片免费在线 | 人人盈棋牌 | 毛片基地黄久久久久久天堂 | 精品999 | 欧美精品xx | 福利视频 | 日韩精品中文字幕在线 | 9ⅰ精品久久久久久久久中文字幕 | 国产成人在线免费观看 | 手机在线欧美 | 91精品国产高清自在线观看 | 国产一区视频导航 | 狂野欧美激情性xxxx欧美 | 国产高清视频在线播放一区 | 日韩久久久久久久久久久久 | 久久久片 | 在线天堂中文www视软件 | 月丁香婷婷 | 91手机电影 | 国产字幕在线观看 | 美女搞黄国产视频网站 | 日本久久影视 | 久久综合加勒比 | 成人久久久久久久久久 | 久久欧美综合 | 在线国产中文字幕 | 在线观看不卡的av | 久久香蕉一区 | 97成人超碰 | 黄色中文字幕在线 | 日韩精品久久久久久久电影99爱 | 国产在线观看一 | 日本aaa在线观看 | 欧美尹人| 91av视频| 国产色久 | 久久人人爽人人片av | 一区二区三区 亚洲 | 在线视频观看你懂的 | 欧美 亚洲 另类 激情 另类 | 国产成视频在线观看 | 波多野结衣资源 | 日韩理论在线 | 欧美a级在线免费观看 | 人人射av| www.在线观看av | 综合网在线视频 | 国产精品久久久久久高潮 | 国产一级免费在线 | 六月丁香在线视频 | www视频在线免费观看 | 九九九电影免费看 | 在线免费观看视频 | 国产91在| 最近中文字幕大全中文字幕免费 | 久久综合网色—综合色88 | 亚洲蜜桃在线 | 国产91勾搭技师精品 | 99在线热播精品免费 | 久久五月精品 | 中文字幕一区二区三区乱码在线 | 91福利社区在线观看 | 国产美女视频免费观看的网站 | 97视频免费看 | 精品黄色在线 | 欧美极品少妇xbxb性爽爽视频 | 国产在线精品一区二区 | 久久久2o19精品 | 丁香婷婷在线观看 | 久久久久国产精品一区二区 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 欧美性生活久久 | 中文字幕第 | 亚洲涩综合| 超碰97在线资源 | 日韩免费av片 | 99这里只有久久精品视频 | 午夜精品在线看 | 伊人婷婷综合 | 97视频人人免费看 | 国产明星视频三级a三级点| 欧美在线视频一区二区三区 | 国产美女被啪进深处喷白浆视频 | 国产玖玖在线 | 久草在线看片 | 久久黄色小说 | 久久亚洲精品国产亚洲老地址 | 激情www| 黄色大片日本免费大片 | 亚洲一二三在线 | 日本一区二区不卡高清 | 91精品国产欧美一区二区 | 国产精品福利午夜在线观看 | 久久久久久久久久久久久9999 | 欧美做受高潮1 | 中文字幕免费高清在线 | 欧美精品亚州精品 | 99爱这里只有精品 | 国产精品毛片一区二区 | 欧美日韩在线视频观看 | 亚洲精品在线免费观看视频 | 97av免费视频 | 国产一级片免费观看 | 91精品国产福利 | 久久精品国产精品亚洲精品 | 992tv成人免费看片 | 日韩久久久 | 成人av视屏| 久久全国免费视频 | 激情影音 | 国产精品乱码一区二区视频 | 日韩欧美精品在线观看 | 99久久er热在这里只有精品15 | 免费在线观看毛片网站 | 偷拍视频一区 | 伊人五月在线 | 亚洲精品乱码久久久久久 | 9热精品| 亚洲精品成人av在线 | 97小视频| 久久精品欧美日韩精品 | 国产精品久久久精品 | www黄色com | 婷婷视频 | 国产极品尤物在线 | 天天干天天射天天操 | 99产精品成人啪免费网站 | 日韩一区二区三区免费视频 | 日韩精品极品视频 | 久久影院一区 | 久草网站 | 日韩高清片 | 日韩午夜精品福利 | 久久精品视频4 | 成年人视频在线免费播放 | 69国产成人综合久久精品欧美 | 中文字幕在线免费观看视频 | 国内精品免费久久影院 | 久久九九国产精品 | 精品视频在线视频 | 中文字幕在线播放一区 | 黄色一集片 | 久久8精品| av在线播放一区二区三区 | 亚洲精品一区二区久 | 欧美老女人xx | 久久兔费看a级 | 国产黄色片免费看 | 久久免费精品国产 | 成人国产精品一区二区 | 久久久久亚洲国产 | 欧美成人精品欧美一级乱黄 | 美女网站在线看 | 五月天,com | 97视频在线观看免费 | 激情综合六月 | 婷婷六月天在线 | 欧美日本在线观看视频 | 奇米网444| 欧美日韩精品在线一区二区 | 黄色av一级 | 亚洲精品欧美视频 | 久久狠狠亚洲综合 | 久久精品www人人爽人人 | 国产一区二区三区高清播放 | 一区二区不卡高清 | 天天插天天操天天干 | 99久久99久久免费精品蜜臀 | 色噜噜狠狠狠狠色综合 | 夜夜爽夜夜操 | 久久欧洲视频 | 国产黄色片一级 | 亚洲理论电影 | 欧美黄色软件 | 国产又黄又硬又爽 | 日韩美在线观看 | 久久久影院一区二区三区 | 免费成人在线网站 | 久久桃花网 | 超碰97网站 | 婷婷在线看 | 久久只有精品 | 国产在线精品播放 | 久久婷亚洲五月一区天天躁 | 国产婷婷精品av在线 | 亚洲精品五月 | 国产99精品在线观看 | 91久久精品一区二区三区 | 色婷婷色 | 中文字幕在线观看完整版 | 在线观看亚洲电影 | 久久免费av电影 | 免费在线激情电影 | 黄www在线观看 | 99在线观看视频网站 | 91成人午夜 | 国产成人精品一区二区在线 | 国产一级做a爱片久久毛片a | 黄免费网站 | 国产一区精品在线观看 | 香蕉视频国产在线 | 国产69精品久久久久99尤 | 国产日韩精品在线 | 精品国产成人av在线免 | 一区二区三区免费在线观看视频 | 日韩三级一区 | 成人久久久久久久久 | 国产精品国产亚洲精品看不卡 | 91高清视频| 欧美色操 | 久久成人亚洲欧美电影 | 九七人人干 | 国产精品24小时在线观看 | 色婷婷综合久色 | 婷婷在线网 | 特级黄色一级 | 成年人黄色在线观看 | 国产成人久久77777精品 | 日韩av中文字幕在线 | 六月丁香在线视频 | 激情大尺度视频 | 亚洲精品乱码久久久一二三 | 国产精品欧美久久久久无广告 | 啪啪激情网 | 夜夜操网站 | 日韩网站免费观看 | 日本韩国精品一区二区在线观看 | 少妇av片| 日韩精品黄 | 国产手机在线视频 | 天天干天天操人体 | 国语精品久久 | 成年人免费观看在线视频 | 久久伊人八月婷婷综合激情 | 97视频一区 | 日韩乱色精品一区二区 | 久久亚洲人 | 国产精品成人免费精品自在线观看 | 在线看av的网址 | 狠狠色噜噜狠狠狠狠2021天天 | 九九综合九九 | 免费在线黄色av | 在线观看免费成人av | 国产精品久久久久久久久久久免费看 | 国产小视频你懂的在线 | 亚洲精品视频在线免费 | 91女神的呻吟细腰翘臀美女 | 国产高清免费在线观看 | 欧美另类sm图片 | 欧美日韩免费一区二区 | 有码中文在线 | 香蕉久久国产 | 成年人电影免费看 | 亚洲成人一二三 | 亚洲国产精品人久久电影 | 日韩字幕在线观看 | 天天操天| 久久亚洲综合国产精品99麻豆的功能介绍 | 91在线精品播放 | 精品一区二区精品 | 黄色毛片电影 | 欧美夫妻性生活电影 | 三级a毛片| 精品国产一区二区三区噜噜噜 | 久久综合五月婷婷 | 992tv在线 | 五月婷婷六月综合 | 成年人黄色大全 | 久久精品免费电影 | 在线一二三区 | 少妇搡bbb | 亚洲视频一| 色91在线视频 | 一级片视频免费观看 | 日本系列中文字幕 | 亚洲欧美久久 | 精品免费一区二区三区 | 亚洲自拍自偷 | 国产一级免费在线观看 | 欧洲亚洲国产视频 | 午夜av免费观看 | 久草在线视频在线观看 | 涩涩网站在线观看 | 亚欧洲精品视频在线观看 | 一区二区三区在线观看中文字幕 | 激情综合啪啪 | 久久久久欠精品国产毛片国产毛生 | 亚洲激情在线观看 | 成人一区在线观看 | 91在线91| 日韩欧美在线观看一区二区 | 久久精品免费 | 97香蕉超级碰碰久久免费软件 | 亚洲欧美日韩中文在线 | 免费a级观看 | 国产精品一区二区久久精品爱微奶 | 国产精品久久久一区二区三区网站 | 国产一区在线免费 | 久草在线观 | 在线视频精品播放 | 香蕉视频在线免费 | 天天操天天射天天舔 | 国产一区二区精品 | 中文视频一区二区 | 天天操人人干 | 亚洲不卡123 | 狠狠色丁香婷婷综合橹88 | 91精品专区 | 久久99国产一区二区三区 | 欧美伦理电影一区二区 | 国产精品三级视频 | 久久久国产精品电影 | 天天色成人网 | 最新影院 | 日韩美女久久 | 亚洲人片在线观看 | 国产黄色在线网站 | 久草网视频 | 男女啪啪视屏 | 99视频在线精品国自产拍免费观看 | 免费久久久 | 久久国产电影 | 99超碰在线播放 | 麻豆视频在线免费 | 亚洲一区二区视频在线播放 | 色婷婷综合久色 | 国产福利91精品一区 | 99热.com | 婷婷六月综合网 | 国产精品剧情在线亚洲 | 日韩精品中文字幕在线播放 | 日韩三级视频在线看 | www国产在线 | 丁香六月伊人 | 中文字幕在线观看免费高清完整版 | 免费av在线网 | 亚洲www天堂com | 国产婷婷在线观看 | 在线观看mv的中文字幕网站 | 91成人精品国产刺激国语对白 | 天天色天天综合 | 国产高清中文字幕 | 亚洲精品在线免费看 | 久久狠狠一本精品综合网 | 超碰人人草 | 国产裸体视频bbbbb | 欧美日韩一区二区三区在线免费观看 | 亚洲黄色免费电影 | 992tv在线观看网站 | 国产精品第十页 | 日本少妇久久久 | 黄色电影小说 | 精品国产免费看 | 免费看在线看www777 | 69国产精品视频 | 日韩av图片| 久久精品一区二区三区中文字幕 | 日本公乱妇视频 | 色91在线视频 | 99热这里只有精品久久 | 中文字幕av有码 | 中文字幕在线观看免费观看 | 91亚色免费视频 | 国产 日韩 中文字幕 | 国产不卡免费av | 不卡的av电影在线观看 | 狠狠躁夜夜躁人人爽视频 | 日日久视频 | a国产精品 | 天天干,狠狠干 | 欧美午夜激情网 | 欧美性极品xxxx做受 | 91精品免费 | 国产精品原创 | 国产精品18久久久久白浆 | 国产免费又黄又爽 | 日韩精品一区二区三区视频播放 | 97人人人人| 天天干天天玩天天操 | av片子在线观看 | 97激情影院| 国产精品毛片久久久 | 国产一区精品在线 | 日韩视频一区二区 | 日韩小视频网站 | 国产 欧美 日产久久 | 久久视频免费在线 | 一区二区三区动漫 | 国产成人精品在线 | 日韩在线一二三区 | 欧美精品一区二区三区四区在线 | 日韩激情综合 | av日韩在线网站 | 在线观看黄色小视频 | 十八岁以下禁止观看的1000个网站 | 国产3p视频 | 免费一级片视频 | 欧美色图视频一区 | 五月亚洲综合 | 日韩有码网站 | 91亚洲夫妻| 最新精品国产 | 亚洲精品乱码久久久久久蜜桃不爽 | 欧美黄色特级片 | 综合铜03 | 在线观看完整版免费 | 国产99中文字幕 | 国产黄色精品在线观看 | 91丨九色丨高潮 | 久久久在线观看 | 黄色一区三区 | 日本最新中文字幕 | 国产欧美在线一区 | 日本精品久久久久中文字幕5 | 激情亚洲综合在线 | 国产精品久久久一区二区三区网站 | 日本黄色一级电影 | 中文视频在线看 | 亚洲精品小视频在线观看 | 91污视频在线观看 | 久久女教师 | 久久久久久久av | 91av视频免费观看 | 在线观看你懂的网址 | 一区在线播放 | 国产精品麻豆91 | 国产不卡一区二区视频 | 国产成视频在线观看 | 五月婷婷.com | 日韩高清久久 | 激情婷婷av| 97超碰人人模人人人爽人人爱 | 国产精品普通话 | 99久久99热这里只有精品 | 中文字幕首页 | 最新av在线播放 | 亚洲精品视 | 欧美三人交| 91在线视频免费91 | 久久久亚洲国产精品麻豆综合天堂 | 毛片网站免费在线观看 | 中文字幕 二区 | 久久亚洲综合国产精品99麻豆的功能介绍 | 性色av一区二区三区在线观看 | 91精品爽啪蜜夜国产在线播放 | 国产理论影院 | 久久精品99国产精品亚洲最刺激 | 精品亚洲欧美无人区乱码 | 伊人五月| 日韩欧美在线综合网 | 美女精品久久久 | 美女网站色 | 中文字幕在线乱 | 久久国产亚洲精品 | 国产99久久精品一区二区300 | 高清av影院 | 热久久视久久精品18亚洲精品 | 日韩1页| 色噜噜狠狠狠狠色综合 | 国产精品免费久久久久久久久久中文 | 五月天婷亚洲天综合网鲁鲁鲁 | 五月激情天 | 韩国av免费观看 | 国产在线精品一区二区三区 | 天天综合91 | 免费看一级片 | 五月婷婷狠狠 | 久久97久久 | 亚洲精品美女久久久久 | 久草精品视频 | 天天拍夜夜拍 | 色网站免费在线看 | 久久首页| 欧美日韩网址 | 日韩三级视频在线看 | 在线小视频国产 | 国产三级精品三级在线观看 | 亚洲精品国产精品国自产 | 色视频网站在线 | 色综久久| 看片一区二区三区 | 麻豆国产在线视频 | 久久久久久网址 | 久久艹免费 | 久草观看视频 | www日韩视频| 又黄又爽又湿又无遮挡的在线视频 | 丰满少妇对白在线偷拍 | 欧美日韩一区二区三区视频 | 91夜夜夜 | 日韩欧美在线观看 | 色 免费观看| 成人欧美一区二区三区在线观看 | av免费成人 | 91精品一区二区三区久久久久久 | 亚洲欧美日韩中文在线 | 在线不卡中文字幕播放 | 狠狠躁夜夜av | 日韩亚洲在线 | 麻豆国产露脸在线观看 | 午夜三级毛片 | 特黄特黄的视频 | 特级毛片aaa | 综合影视 | 手机看片国产 | 日本中文字幕在线看 | 69av网| 国产丝袜一区二区三区 | 亚洲精品男人天堂 | 在线电影91 | 亚洲成人第一区 | 免费成人黄色av | 国产精品久久在线观看 | 国产精品私拍 | 中文字幕在线观看av | 亚洲第一久久久 | 久久亚洲热 | 亚洲精品视频免费 | 日韩中文在线字幕 | 免费能看的黄色片 | 中文字幕免费高清在线 | 中文字幕 国产专区 | 天天综合天天综合 | 久草视频中文 | 在线观看国产日韩欧美 | 午夜精品999 | 欧美成天堂网地址 | 亚洲国产伊人 | 久久情网| 18av在线视频 | 99免费在线视频 | 日韩a级免费视频 | 成人免费在线观看电影 | 国产免费午夜 | 亚洲片在线观看 | 欧美激情视频一区二区三区免费 | 久久久久久美女 | 精品在线99| 最近2019年日本中文免费字幕 | 在线国产视频一区 | 18岁免费看片 | 蜜臀久久99精品久久久无需会员 | 在线看片一区 | 91成人精品 | 日韩精品视 | 国产高清在线免费观看 | 操操操av | 精品免费观看视频 | 亚洲在线高清 | 成人国产精品免费观看 | 国产网红在线观看 | www.五月婷 | 高清av网站 | 免费看黄在线观看 | 久久99网站 | 欧洲精品久久久久毛片完整版 | 国产精品h在线观看 | 国产偷在线 | 亚洲日本色 | 国产精品久一 | 中文字幕国产一区 | 欧美激情视频一区二区三区 | 亚洲天堂网站视频 | 久久久久福利视频 | 天天综合狠狠精品 | 久久免费福利 | 国产精品成 | 久久视频99 | 免费看麻豆 | www日| 久久久久久高清 | 免费视频久久久 | 欧美精品一区二区性色 | 欧美精品少妇xxxxx喷水 | 天堂av观看 | 91av美女| 久福利 | 欧美日韩二区在线 | 又黄又爽又无遮挡免费的网站 | av在线影片 | 成人动漫精品一区二区 | av成人免费在线观看 | 国产成人精品女人久久久 | 色婷婷a | 黄色av在| 91大神电影| 干狠狠 | 伊人资源站 | 久久伊99综合婷婷久久伊 | 久久婷婷一区 | 美女精品久久久 | 在线观看av黄色 | 久久亚洲综合国产精品99麻豆的功能介绍 | 亚洲精选在线 | 91精品国产自产在线观看 | 色综合亚洲精品激情狠狠 | 亚洲人成在线观看 | 久久国产精品小视频 | 久久久久免费精品视频 | 日韩欧美aaa | 97天天综合网 | 少妇bbb好爽 | 国内久久视频 | 久久综合国产伦精品免费 | 久久成年人视频 | 国产成人av免费在线观看 | 国产精品18久久久久久久久久久久 | 婷婷五综合| 亚洲经典视频 | 中文字幕久久精品一区 | 开心色插 | 日韩最新中文字幕 | 中文字幕一区二区三区四区在线视频 | 日韩中文字幕网站 | 中文字幕在线观看三区 | 国产一区不卡在线 | 国产区网址 | 亚洲码国产日韩欧美高潮在线播放 | 色综合夜色一区 | 色中射 | 视频在线播放国产 | 久久电影国产免费久久电影 | 国产韩国日本高清视频 | 久草资源在线观看 | 91精品国产乱码 | 天天草天天干天天 | 国产一区二区三区免费观看视频 | 亚洲精品1区2区3区 超碰成人网 | 国产成人久久精品77777综合 | 久精品视频免费观看2 | 国产香蕉久久 | 天天操天天草 | 亚洲国产mv | 欧美a视频| 久久一区二区三区国产精品 | 成全在线视频免费观看 | 少妇bbw撒尿| 四虎在线观看视频 | 狠狠色噜噜狠狠狠狠2022 | 国产女人18毛片水真多18精品 | av不卡在线看 | 成人免费xyz网站 | 欧美婷婷色 | 在线99热 | 国产免费小视频 | 一级黄色片在线 | 亚洲最大免费成人网 | 欧美日韩中字 | 狠狠做深爱婷婷综合一区 | 国产原创在线 | 色偷偷888欧美精品久久久 | 一区中文字幕电影 | 欧美日韩亚洲一 | 日韩免费一区二区在线观看 | 日韩一区二区免费播放 | 国产一级不卡毛片 | 日韩系列| 天天操综合网站 | 免费高清在线观看电视网站 | 久色免费视频 | 国产精品福利一区 | 日韩精品中文字幕有码 | 久久激情视频免费观看 | 久久久.com| 日韩欧美在线观看一区二区三区 | 97国产大学生情侣酒店的特点 | 丁香在线观看完整电影视频 | 天天干天天操天天射 | 久久视频二区 | www免费网站在线观看 | 一区二区三区在线不卡 | 黄av免费 | 亚洲综合视频在线观看 | 奇米网在线观看 | 在线观看视频一区二区 | 99精品免费在线观看 | 国产 在线 高清 精品 | 亚洲激情在线视频 | 日韩激情片在线观看 | 久久成人国产精品一区二区 | 婷婷久久网| 99国产情侣在线播放 | 婷婷久久五月天 | 国产在线欧美 | 97热久久免费频精品99 | 在线观看一级视频 | 久久国产手机看片 | 亚洲日b视频| 亚洲国产精品日韩 | 国内精品久久久久久久影视简单 | 91女子私密保健养生少妇 | 久久久久久久99 | 国产高清黄 | 国产一级在线看 | 日韩在线观看免费 | 国产一级片不卡 | 亚洲精品免费在线 | 91精品欧美 | 婷婷视频在线观看 | 国产精品欧美久久久久久 | 五月天综合色激情 | 97在线视 | 欧产日产国产69 | 亚洲最大在线视频 | 亚洲另类视频在线观看 | av不卡免费看 | 91久久精品一区二区二区 | av久久久 | av一级二级 | 日韩另类在线 | 国产精品免费av | 国产成人一区二区啪在线观看 | 欧美成人黄色片 | 久久国产视频网站 | 精品在线亚洲视频 | 国产精品久久久久久妇 | 日韩视频区 | 中文字幕一区二区三区四区久久 | 亚洲国产电影在线观看 | 99久久成人| 九九久久久 | 亚洲精品视频在线免费播放 | 热九九精品 | 国产亚洲高清视频 | 国产精品成人一区二区 | 精品日韩视频 | 久久精品国产精品亚洲 | 国产高清视频在线免费观看 | 丁香婷婷网 | 97视频免费在线 | 欧美色图另类 | 日韩精品91偷拍在线观看 | 草久在线观看视频 | 欧美成人a在线 | 日韩久久影院 | 黄色免费观看网址 | 在线免费黄 | 欧美人zozo| 麻豆高清免费国产一区 | 在线观看精品国产 | 久久久观看 | 色福利网 | 国产成人性色生活片 | 国产成人精品国内自产拍免费看 | 日本中文在线播放 | 久久精品成人欧美大片古装 | 草久久久久久 | 欧美一区日韩精品 | 日韩一区二区免费播放 | 亚洲四虎在线 | 在线观看日韩免费视频 | 最近中文字幕在线中文高清版 | 麻豆国产精品va在线观看不卡 | 天天爱天天草 | 最新亚洲视频 | 天天舔夜夜操 | 久久久精品久久日韩一区综合 | 亚洲免费激情 | 欧美怡红院| 91精品久久久久久综合五月天 | 免费在线一区二区 | 97天堂| 国产99久| 久久黄视频 | 国产人成在线观看 | 日本精品在线视频 | 激情五月婷婷激情 | av成人亚洲 | 欧美精品小视频 | 亚洲午夜精品久久久久久久久 | 欧美91精品久久久久国产性生爱 | av免费电影在线观看 | 成片免费观看视频大全 | 美女很黄免费网站 | 国产精品专区在线 |