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

旅途

如果想飛得高,就該把地平線忘掉

COM 組件設(shè)計與應(yīng)用(一)----重讀一遍,別有一番感覺

一、前言

  公元一九九五年某個夜黑風(fēng)高的晚上,我的一位老師跟我說:“小楊呀,以后寫程序就和搭積木一樣啦。你趕快學(xué)習(xí)一些OLE的技術(shù)吧......”,當(dāng)時我心里就尋思 :“開什么玩笑?搭積木方式寫程序?再過100年吧......”,但作為一名聽話的好學(xué)生,我開始在書店里“踅摸”(注1)有關(guān)OLE的書籍(注2)。功夫不負(fù)有心人,終于買到了我的第一本COM書《OLE2 高級編程技術(shù)》,這本800多頁的大布頭花費了我1/5的月工資呀......于是開始日夜耕讀.....
??? 功夫不負(fù)有心人,我堅持讀完了全部著作,感想是:這本書,在說什么吶?
??? 功夫不負(fù)有心人,我又讀完了一遍大布頭,感想是:咳~~~,沒懂!
??? 功夫不負(fù)有心人,我再,我再,我再讀 ... 感想是:哦~~~,讀懂了一點點啦,哈哈哈。
??? ......? ......
??? 功夫不負(fù)有心人,我終于,我終于懂了。
??? 800頁的書對現(xiàn)在的我來說,其實也就10幾頁有用。到這時候才體會出什么叫“書越讀越薄”的道理了。到后來,能買到的書也多了,上網(wǎng)也更方便更便宜了......

  為了讓VCKBASE上的朋友,不再經(jīng)歷我曾經(jīng)的痛苦、不再重蹈我“無頭蒼蠅”般探索的艱辛、為了VCKBASE的蓬勃發(fā)展、為了中國軟件事業(yè)的騰飛(糟糕,吹的太也高了)......我打算節(jié)約一些在 BBS 上賺分的時間,寫個系列論文,就叫“COM組件設(shè)計與應(yīng)用”吧。今天是第一部分——起源。

二、文件的存儲

  傳說350年前,牛頓被蘋果砸到了頭,于是發(fā)現(xiàn)了萬有引力。但到了二十一世紀(jì)的現(xiàn)在,任何一個技術(shù)的發(fā)明和發(fā)展,已經(jīng)不再依靠圣人靈光的一閃。技術(shù)的進(jìn)步轉(zhuǎn)而是被社會的需求、商業(yè)的利益、競爭的壓力、行業(yè)的滲透等推動的。微軟在Windows平臺上的組件技術(shù)也不例外,它的發(fā)明,有其必然因素。什么是這個因素那?答案是——文件的存儲。
  打開記事本程序,輸入了一篇文章后,保存。——這樣的文件叫“非結(jié)構(gòu)化文件”;
  打開電子表格程序,輸入一個班的學(xué)生姓名和考試成績,保存。——這樣的文件叫“標(biāo)準(zhǔn)結(jié)構(gòu)化文件”;
  在我們寫的程序中,需要把特定的數(shù)據(jù)按照一定的結(jié)構(gòu)和順序?qū)懙轿募斜4妗!@樣的文件叫“自定義結(jié)構(gòu)化文件”;(比如 *.bmp 文件)
  以上三種類型的文件,大家都見的多了。那么文件存儲就依靠上述的方式能滿足所有的應(yīng)用需求嗎?恩~~~,至少從計算機發(fā)明后的50多年來,一直是夠用的了。嘿嘿,下面看看商業(yè)利益的推動作用,對文件 的存儲形式產(chǎn)生了什么變化吧。30歲以上的朋友,我估計以前都使用過以下幾個著名的軟件:WordStar(獨霸DOS下的英文編輯軟件),WPS(裘伯君寫的中文編輯軟件,據(jù)說當(dāng)年的市場占有率高達(dá)90%,各種計算機培訓(xùn)班的必修課程),LOTUS-123(蓮花公司出品的電子表格軟件)......
??? 微軟在成功地推出 Windows 3.1 后,開始垂涎桌面辦公自動化軟件領(lǐng)域。微軟的 OFFICE 開發(fā)部門,各小組分別獨立地開發(fā)了 WORD 和 EXCEL 等軟件,并采用“自定義結(jié)構(gòu)”方式,對文件進(jìn)行存儲。在激烈的市場競爭下,為了打敗競爭對手,微軟自然地產(chǎn)生了一個念頭------如果我能在 WORD 程序中嵌入 EXCEL,那么用戶在購買了我 WORD 軟件的情況下,不就沒有必要再買 LOTUS-123 了嗎?!“惡毒”(中國微軟的同志們看到了這個詞,不要激動,我是加了引號的呀)的計劃產(chǎn)生后,他們開始了實施工作,這就是 COM 的前身 OLE 的起源(注3)。但立刻就遇到了一個嚴(yán)重的技術(shù)問題:需要把 WORD 產(chǎn)生的 DOC 文件和 EXCEL 產(chǎn)生的 XLS 文件保存在一起。
 

方案

優(yōu)點

缺點

建立一個子目錄,把 DOC、XLS 存儲在這同一個子目錄中。 數(shù)據(jù)隔離性好,WORD 不用了解 EXCEL 的存儲結(jié)構(gòu);容易擴展。 結(jié)構(gòu)太松散,容易造成數(shù)據(jù)的損壞或丟失。
不易攜帶。
修改文件存儲結(jié)構(gòu),在DOC結(jié)構(gòu)基礎(chǔ)上擴展出包容 XLS 的結(jié)構(gòu)。 結(jié)構(gòu)緊密,容易攜帶和統(tǒng)一管理。 WORD 的開發(fā)人員需要通曉 EXCEL 的存儲格式;缺少擴展性,總不能新加一個類型就擴展一下結(jié)構(gòu)吧?!

??? 以上兩個方案,都有嚴(yán)重的缺陷,怎么解決那?如果能有一個新方案,能夠合并前兩個方案的優(yōu)點,消滅缺點,該多好呀......微軟是作磁盤***作系統(tǒng)起家的,于是很自然地他們提出了一個非常完美的設(shè)計方案,那就是把磁盤文件的管理方式移植到文件中了------復(fù)合文件,俗稱“文件中的文件系統(tǒng)”。連微軟當(dāng)年都沒有想到,就這么一個簡單的想法,居然最后就演變出了 COM 組件程序設(shè)計的方法。可以說,復(fù)合文件是 COM 的基石。下圖是磁盤文件組織方式與復(fù)合文件組織方式的類比圖:

圖一、左側(cè)表示一個磁盤下的文件組織方式,右側(cè)表示一個復(fù)合文件內(nèi)部的數(shù)據(jù)組織方式。

三、復(fù)合文件的特點

  1. 復(fù)合文件的內(nèi)部是使用指針構(gòu)造的一棵樹進(jìn)行管理的。編寫程序的時候要注意,由于使用的是單向指針,因此當(dāng)做定位***作的時候,向后定位比向前定位要快;
  2. 復(fù)合文件中的“流對象”,是真正保存數(shù)據(jù)的空間。它的存儲單位為512字節(jié)。也就是說,即使你在流中只保存了一個字節(jié)的數(shù)據(jù),它也要占據(jù)512字節(jié)的文件空間。啊~~~,這也太浪費了呀?不浪費!因為文件保存在磁盤上,即使一個字節(jié)也還要占用一個“簇”的空間那;
  3. 不同的進(jìn)程,或同一個進(jìn)程的不同線程可以同時訪問一個復(fù)合文件的不同部分而互不干擾;
  4. 大家都有這樣的體會,當(dāng)需要往一個文件中插入一個字節(jié)的話,需要對整個文件進(jìn)行***作,非常煩瑣并且效率低下。而復(fù)合文件則提供了非常方便的“增量訪問”能力;
  5. 當(dāng)頻繁地刪除文件,復(fù)制文件后,磁盤空間會變的很零碎,需要使用磁盤整理工具進(jìn)行重新整合。和磁盤管理非常相似,復(fù)合文件也會產(chǎn)生這個問題,在適當(dāng)?shù)臅r候也需要整理,但比較簡單,只要調(diào)用一個函數(shù)就可以完成了。

四、瀏覽復(fù)合文件

  VC6.0 附帶了一個工具軟件“復(fù)合文件瀏覽器”,文件名是“vc目錄\Common\Tools\DFView.exe”。為了方便使用該程序,可以把它加到工具(tools)菜單中。方法是:Tools\Customize...\Tools卡片中增加新的項目。運行 DFView.exe,就可以打開一個復(fù)合文件進(jìn)行觀察了(注4)。但奇怪的是,在 Microsoft Visual Studio .NET 2003 中,我反而找不到這個工具程序了,汗!不過這恰好提供給大家一個練習(xí)的機會,在你閱讀完本篇文章并掌握了編程方法后,自己寫一個“復(fù)合文件瀏覽編輯器”程序,又練手了,還有實用的價值。

、復(fù)合文件函數(shù)

  復(fù)合文件的函數(shù)和磁盤目錄文件的***作非常類似。所有這些函數(shù),被分為3種類型:WIN API 全局函數(shù),存儲 IStorage 接口函數(shù),流 IStream 接口函數(shù)。什么是接口?什么是接口函數(shù)?以后的文章中再陸續(xù)介紹,這里大家只要把“接口”看成是完成一組相關(guān)***作功能的函數(shù)集合就可以了。
 

WIN API 函數(shù)

功能說明

StgCreateDocfile() 建立一個復(fù)合文件,得到根存儲對象
StgOpenStorage() 打開一個復(fù)合文件,得到根存儲對象
StgIsStorageFile() 判斷一個文件是否是復(fù)合文件

 

IStorage 函數(shù)

功能說明

CreateStorage() 在當(dāng)前存儲中建立新存儲,得到子存儲對象
CreateStream() 在當(dāng)前存儲中建立新流,得到流對象
OpenStorage() 打開子存儲,得到子存儲對象
OpenStream() 打開流,得到流對象
CopyTo() 復(fù)制存儲下的所有對象到目標(biāo)存儲中,該函數(shù)可以實現(xiàn)“整理文件,釋放碎片空間”的功能
MoveElementTo() 移動對象到目標(biāo)存儲中
DestoryElement() 刪除對象
RenameElement() 重命名對象
EnumElements() 枚舉當(dāng)前存儲中所有的對象
SetElementTimes() 修改對象的時間
SetClass() 在當(dāng)前存儲中建立一個特殊的流對象,用來保存CLSID(注5)
Stat() 取得當(dāng)前存儲中的系統(tǒng)信息
Release() 關(guān)閉存儲對象
 

IStream 函數(shù)

功能說明

Read() 從流中讀取數(shù)據(jù)
Write() 向流中寫入數(shù)據(jù)
Seek() 定位讀寫位置
SetSize() 設(shè)置流尺寸。如果預(yù)先知道大小,那么先調(diào)用這個函數(shù),可以提高性能
CopyTo() 復(fù)制流數(shù)據(jù)到另一個流對象中
Stat() 取得當(dāng)前流中的系統(tǒng)信息
Clone() 克隆一個流對象,方便程序中的不同模塊***作同一個流對象
Release() 關(guān)閉流對象
 
WIN API 補充函數(shù) 功能說明
WriteClassStg() 寫CLSID到存儲中,同IStorage::SetClass()
ReadClassStg() 讀出WriteClassStg()寫入的CLSID,相當(dāng)于簡化調(diào)用IStorage::Stat()
WriteClassStm() 寫CLSID到流的開始位置
ReadClassStm() 讀出WriteClassStm()寫入的CLSID
WriteFmtUserTypeStg() 寫入用戶指定的剪貼板格式和名稱到存儲中
ReadFmtUserTypeStg() 讀出WriteFmtUserTypeStg()寫入的信息。方便應(yīng)用程序快速判斷是否是它需要的格式數(shù)據(jù)。
CreateStreamOnHGlobal() 內(nèi)存句柄 HGLOBAL 轉(zhuǎn)換為流對象
GetHGlobalFromStream() 取得CreateStreamOnHGlobal()調(diào)用中使用的內(nèi)存句柄

為了讓大家快速地瀏覽和掌握基本方法,上面所列表的函數(shù)并不是全部,我省略了“事務(wù)”函數(shù)和未實現(xiàn)函數(shù)部分。更全面的介紹,請閱讀 MSDN。
??? 下面程序片段,演示了一些基本函數(shù)功能和調(diào)用方法。?
示例一:建立一個復(fù)合文件,并在其下建立一個子存儲,在該子存儲中再建立一個流,寫入數(shù)據(jù)。

void SampleCreateDoc()
{
	::CoInitialize(NULL);	// COM 初始化
				// 如果是MFC程序,可以使用AfxOleInit()替代

	HRESULT hr;		// 函數(shù)執(zhí)行返回值
	IStorage *pStg = NULL;	// 根存儲接口指針
	IStorage *pSub = NULL;	// 子存儲接口指針
	IStream *pStm = NULL;	// 流接口指針

	hr = ::StgCreateDocfile(	// 建立復(fù)合文件
		L"c:\\a.stg",	// 文件名稱
		STGM_CREATE | STGM_WRITE | STGM_SHARE_EXCLUSIVE,	// 打開方式
		0,		// 保留參數(shù)
		&pStg);		// 取得根存儲接口指針
	ASSERT( SUCCEEDED(hr) );	// 為了突出重點,簡化程序結(jié)構(gòu),所以使用了斷言。
				// 在實際的程序中則要使用條件判斷和異常處理

	hr = pStg->CreateStorage(	// 建立子存儲
		L"SubStg",	// 子存儲名稱
		STGM_CREATE | STGM_WRITE | STGM_SHARE_EXCLUSIVE,
		0,0,
		&pSub);		// 取得子存儲接口指針
	ASSERT( SUCCEEDED(hr) );

	hr = pSub->CreateStream(	// 建立流
		L"Stm",		// 流名稱
		STGM_CREATE | STGM_WRITE | STGM_SHARE_EXCLUSIVE,
		0,0,
		&pStm);		// 取得流接口指針
	ASSERT( SUCCEEDED(hr) );

	hr = pStm->Write(		// 向流中寫入數(shù)據(jù)
		"Hello",		// 數(shù)據(jù)地址
		5,		// 字節(jié)長度(注意,沒有寫入字符串結(jié)尾的\0)
		NULL);		// 不需要得到實際寫入的字節(jié)長度
	ASSERT( SUCCEEDED(hr) );

	if( pStm )	pStm->Release();// 釋放流指針
	if( pSub )	pSub->Release();// 釋放子存儲指針
	if( pStg )	pStg->Release();// 釋放根存儲指針

	::CoUninitialize()		// COM 釋放
				// 如果使用 AfxOleInit(),則不調(diào)用該函數(shù)
}

圖二、運行示例程序一后,使用 DFView.exe 打開觀察復(fù)合文件的效果圖

示例二:打開一個復(fù)合文件,枚舉其根存儲下的所有對象
---(自己的理解,是不是每個對象就是一個子存儲??)
#i nclude 	// ANSI、MBCS、UNICODE 轉(zhuǎn)換

void SampleEnum() 
{	// 假設(shè)你已經(jīng)做過 COM 初始化了

	LPCTSTR lpFileName = _T( "c:\\a.stg" );
	HRESULT hr;
	IStorage *pStg = NULL;
	
	USES_CONVERSION;				// (注6)
	LPCOLESTR lpwFileName = T2COLE( lpFileName );	// 轉(zhuǎn)換T類型為寬字符
	hr = ::StgIsStorageFile( lpwFileName );	// 是復(fù)合文件嗎?
	if( FAILED(hr) )	return;

	hr = ::StgOpenStorage(			// 打開復(fù)合文件
		lpwFileName,			// 文件名稱
		NULL,
		STGM_READ | STGM_SHARE_DENY_WRITE,
		0,
		0,
		&pStg);				// 得到根存儲接口指針

	IEnumSTATSTG *pEnum=NULL;	// 枚舉器
	hr = pStg->EnumElements( 0, NULL, 0, &pEnum );
	ASSERT( SUCCEEDED(hr) );

	STATSTG statstg;
	while( NOERROR == pEnum->Next( 1, &statstg, NULL) )
	{
		// statstg.type 保存著對象類型 STGTY_STREAM 或 STGTY_STORAGE
		// statstg.pwcsName 保存著對象名稱
		// ...... 還有時間,長度等很多信息。請查看 MSDN

		::CoTaskMemFree( statstg.pwcsName );	// 釋放名稱所使用的內(nèi)存(注6)
	}
	
	if( pEnum )	pEnum->Release();
	if( pStg )	pStg->Release();
}
六、小結(jié)

  復(fù)合文件,結(jié)構(gòu)化存儲,是微軟組件思想的起源,在此基礎(chǔ)上繼續(xù)發(fā)展出了持續(xù)性、命名、ActiveX、對象嵌入、現(xiàn)場激活......一系列的新技術(shù)、新概念。因此理解掌握 復(fù)合文件是非常重要的,即使在你的程序中并沒有全面使用組件技術(shù),復(fù)合文件技術(shù)也是可以單獨被應(yīng)用的。祝大家學(xué)習(xí)快樂,為社會主義軟件事業(yè)而奮斗:-)

留作業(yè)啦......
作業(yè)1:寫個小應(yīng)用程序,從 MSWORD 的 doc 文件中,提取出附加信息(作者、公司......)。
作業(yè)2:寫個全功能的“復(fù)合文件瀏覽編輯器”。

注1:踅摸(xuemo),動詞,北方方言,尋找搜索的意思。
注2:問:為什么不上網(wǎng)查資料學(xué)習(xí)?
???? 答:開什么國際玩笑!在那遙遠(yuǎn)的1995年代,我的500塊工資,不吃不喝正好夠上100小時的Internet網(wǎng)。
注3:OLE,對象的連接與嵌入。
注4:可以用 DFView.exe 打開 MSWORD 的 DOC 文件進(jìn)行復(fù)合文件的瀏覽。但是該程序并沒有實現(xiàn)國際化,不能打開中文文件名的復(fù)合文件,因此需要改名后才能瀏覽。
注5:CLSID,在后續(xù)的文章中介紹。
注6:關(guān)于 COM 中內(nèi)存使用的問題,在后續(xù)的文章中介紹。

posted on 2007-07-31 10:20 旅途 閱讀(649) 評論(0)  編輯 收藏 引用 所屬分類: COM+/DCOM

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲激情六月丁香| 久久人91精品久久久久久不卡 | 亚洲精品自在在线观看| 欧美风情在线观看| 亚洲在线播放电影| 国产精品igao视频网网址不卡日韩| aa级大片欧美| 久久久久国产精品www| 亚洲激情视频在线| 激情欧美一区二区三区| 男同欧美伦乱| 亚洲免费在线观看视频| 欧美福利电影在线观看| 欧美一区成人| 91久久精品国产91久久性色tv| 国产日韩在线视频| 欧美国产精品人人做人人爱| 欧美日韩精品在线播放| 久久久久久亚洲精品杨幂换脸| 亚洲日韩中文字幕在线播放| 美日韩精品免费观看视频| 亚洲天堂视频在线观看| 欧美国产日产韩国视频| 久久精品国产亚洲精品 | 亚洲第一久久影院| 国产精品久久久久毛片大屁完整版 | 亚洲免费高清| 亚洲电影在线播放| 久久国产精品毛片| 欧美韩国日本一区| 亚洲少妇最新在线视频| 日韩视频专区| 欧美一区二区三区视频| 亚洲尤物影院| 久热精品视频| 久久综合色8888| 欧美日韩在线精品| 欧美日在线观看| 国产精品久久久久久久9999| 欧美日韩亚洲在线| 国产一区二区三区久久久久久久久| 国产精品免费一区二区三区在线观看 | 久久国产免费| 日韩视频一区二区三区| 午夜精品久久久久久久蜜桃app| 亚洲欧美制服另类日韩| 亚洲国产精品久久久久| 黄色国产精品一区二区三区| 国产精品久久久久久亚洲调教| 激情六月婷婷久久| 亚洲综合日韩中文字幕v在线| 夜夜爽www精品| 亚洲香蕉在线观看| 亚洲欧美国产高清va在线播| 亚洲视频精品| 久久电影一区| 欧美a级一区| 亚洲国产日本| 正在播放日韩| 亚洲国产精品高清久久久| 亚洲一区bb| 亚洲激情黄色| 亚洲无玛一区| 欧美日韩在线观看一区二区| 99精品欧美一区二区三区综合在线 | 欧美日韩一视频区二区| 亚洲人成在线影院| 欧美xxxx在线观看| 久久精品观看| 欧美日韩美女在线| 亚洲精品国产精品国产自| 亚洲一区二区在线观看视频| 亚洲精品一二三| 欧美在线视频一区二区| 麻豆av福利av久久av| 国产专区欧美精品| 欧美激情中文不卡| 欧美一区在线直播| 国产一区二区三区日韩欧美| 久久精品国产亚洲一区二区| 欧美主播一区二区三区美女 久久精品人 | 欧美激情视频一区二区三区免费| 国产精品日韩一区二区| 影音先锋国产精品| 99精品视频免费在线观看| 欧美黑人多人双交| 欧美成ee人免费视频| 国产精品系列在线| 欧美有码在线视频| 久久精品毛片| 国产精品亚洲精品| 久久精品国产91精品亚洲| 久久爱另类一区二区小说| 亚洲第一精品福利| 亚洲精品在线视频观看| 国产精品区二区三区日本| 狠狠色综合一区二区| 久热精品视频在线免费观看| 亚洲桃花岛网站| 国产日韩一区二区| 欧美国产日产韩国视频| 欧美性猛交99久久久久99按摩 | 亚洲视频自拍偷拍| 欧美一区二视频| 亚洲国产三级网| 亚洲最新视频在线| 国产一区二区三区四区hd| 欧美激情亚洲视频| 国产精品久久久久久久久免费桃花| 久久频这里精品99香蕉| 亚洲天堂激情| 亚洲高清不卡一区| 亚洲永久在线观看| 亚洲人成网站色ww在线| 亚洲免费在线视频一区 二区| 1204国产成人精品视频| 在线亚洲+欧美+日本专区| 一区二区三区在线观看欧美| 夜夜躁日日躁狠狠久久88av| 好吊色欧美一区二区三区四区 | 欧美日韩日本网| 久久综合伊人77777尤物| 欧美视频一区在线| 欧美黄色免费| 国产自产在线视频一区| 一本色道久久| 国产精品久久久久久久久久直播| 欧美成人情趣视频| 国产精品国产三级国产专区53 | 玖玖精品视频| 国产精品人成在线观看免费| 欧美激情影音先锋| 在线观看视频亚洲| 欧美亚洲网站| 亚洲免费在线观看| 欧美另类高清视频在线| 亚洲自拍三区| 欧美激情精品久久久久久久变态| 久久精品日产第一区二区三区| 欧美午夜不卡视频| 亚洲久久一区二区| 亚洲美女尤物影院| 欧美国产日韩一二三区| 亚洲高清色综合| 亚洲国产精品成人一区二区| 久久嫩草精品久久久精品| 久久久在线视频| 国外视频精品毛片| 久久精品91久久久久久再现| 久久久久久久久久久久久久一区| 国产免费亚洲高清| 亚洲大片在线| 久久狠狠婷婷| 久久久久久夜精品精品免费| 国产色爱av资源综合区| 午夜亚洲视频| 在线观看亚洲精品| 久久免费99精品久久久久久| 巨胸喷奶水www久久久免费动漫| 国产色综合久久| 欧美在线电影| 欧美成人精品影院| 亚洲人成久久| 欧美日韩国产专区| 亚洲特色特黄| 久久精品视频免费播放| 黄色一区三区| 久热精品在线视频| 亚洲精品国产精品乱码不99| 亚洲理论电影网| 欧美午夜精品久久久久久久| 99视频日韩| 欧美在线观看网站| 亚洲成人自拍视频| 欧美激情视频一区二区三区免费 | 国产精品久久久久久久电影 | 欧美高清视频在线观看| 亚洲每日在线| 久久精品国产欧美亚洲人人爽| 亚洲黄页视频免费观看| 欧美日韩三级电影在线| 久久国产免费| 亚洲深夜福利在线| 亚洲第一精品在线| 久久国内精品视频| 亚洲视频久久| 亚洲人成在线观看| 娇妻被交换粗又大又硬视频欧美| 欧美精品麻豆| 久久er精品视频| 一本色道久久综合狠狠躁的推荐| 久久亚洲综合色一区二区三区| 国产精品久久久久久久浪潮网站 | 亚洲一区视频| 亚洲高清av在线| 国内精品模特av私拍在线观看 | 亚洲精品中文字幕女同| 国产精品一区免费观看| 欧美国内亚洲| 欧美一区二区视频在线观看2020|