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

把握命運,追逐夢想

對自己所做的事要有興趣,同時還要能夠堅持不懈

統計

留言簿(1)

閱讀排行榜

評論排行榜

2011年4月22日 #

VC 2008 sp1 中 deque的erase函數的問題

該函數在erase一個元素的時候,先復制最近端,例如該元素靠近前端,那么該元素之前的所有元素被復制,并后移拷貝,達到覆蓋該元素的效果,導致最后Destroy的是第一個元素,析構函數也是第一個元素的,由于第一個元素被復制了,所以第一個元素如果沒有拷貝復制函數來處理指針變量的話,那么之后第一個元素的副本中的指針將是錯誤的,而且同時有一個問題,我們想要destroy的那個元素的析構函數沒被調用。

posted @ 2011-04-22 09:02 把握命運 閱讀(641) | 評論 (2)編輯 收藏

2009年8月24日 #

def文件一個比較詳細的例子

先看看EXPORTS語法規則:
entryname[=internalname] [@ordinal [NONAME]] [PRIVATE] [DATA]

對上面語法的解釋:
1、

entryname 是要導出的函數名或變量名。這是必選項。如果導出的名稱與 DLL 中的名稱不同,則通過 internalname 指定 DLL 中導出的名稱。例如,如果 DLL 導出函數 func1(),要將它用作 func2(),則應指定:

EXPORTS
func2=func1

2、

@ordinal 允許指定是序號而不是函數名將進入 DLL 的導出表。這有助于最小化 DLL 的大小。.LIB 文件將包含序號與函數之間的映射,這使您得以像通常在使用 DLL 的項目中那樣使用函數名。

可選的 NONAME 關鍵字允許只按序號導出,并減小結果 DLL 中導出表的大小。但是,如果要在 DLL 上使用 GetProcAddress,則必須知道序號,因為名稱將無效。

可選的 PRIVATE 關鍵字禁止將 entryname 放到由 LINK 生成的導入庫中。它對同樣是由 LINK 生成的圖像中的導出無效。

可選的 DATA 關鍵字指定導出的是數據,而不是代碼。例如,可以導出數據變量:

EXPORTS
i DATA

當對同一導出使用 PRIVATEDATA 時,PRIVATE 必須位于 DATA 的前面。

3、

有三種導出定義的方法,按照建議的使用順序依次為:

  1. 源代碼中的 __declspec(dllexport) 關鍵字

  2. .def 文件中的 EXPORTS 語句

  3. LINK 命令中的 /EXPORT 規范

所有這三種方法可以用在同一個程序中。LINK 在生成包含導出的程序時還創建導入庫,除非生成中使用了 .exp 文件。


4、一個詳細的
EXPORTS
DllCanUnloadNow      @1     PRIVATE   DATA
DllWindowName = Name        DATA
DllGetClassObject    @4 NONAME   PRIVATE
DllRegisterServer    @7
DllUnregisterServer
注意,使用 .def 文件從 DLL 中導出變量時,不需要在變量上指定 __declspec(dllexport)。但是,在任何使用 DLL 的文件中,仍必須在數據聲明上使用 __declspec(dllimport)
 
下面的是一個例子,可以看到def文件實際上的作用。











Node_t node;

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    node.x 
= 5;
    node.y 
= 6;
    
return TRUE;
}



int Max(int x, int y)
{
    
if(x>=y)
        
return x;
    
else
        
return y;
}


int Min(int x, int y)
{
    
if(x>=y)
        
return y;
    
else
        
return x;
}


Node_t 
* func1()
{
    
return &node;
}


Node_t 
* func2()
{
    
return &node;
}

下面是def文件


EXPORTS
Max            
=Max    @2
MinChange    
=Min    @1
func1        
=func1    @3    NONAME 
func2        
=func2    @5    PRIVATE 
node        
=node    @8    PRIVATE        

下面是對應的lib的導出

 2    ?Max@@YAHHH@Z (int __cdecl Max(int,int))
 
1    ?MinChange@@YAHHH@Z (int __cdecl MinChange(int,int))
 
3    ?func1@@YAPAUNode_t@@XZ (struct Node_t * __cdecl func1(void))

下面是對應的dll文件的導出

    ordinal hint RVA      name

          
2    0 00001020 Max = ?Max@@YAHHH@Z (int __cdecl Max(int,int))
          
1    1 00001030 MinChange = ?Min@@YAHHH@Z (int __cdecl Min(int,int))
          
5    2 00001040 func2 = ?func1@@YAPAUNode_t@@XZ (struct Node_t * __cdecl func1(void))
          
8    3 00003348 node = ?node@@3UNode_t@@A (struct Node_t node)
          
3      00001040 [NONAME] ?func1@@YAPAUNode_t@@XZ (struct Node_t * __cdecl func1(void))

從上面可以看出來,def文件的符號在lib中的作用并不大,但是函數名稱,比如?MinChange@@YAHHH@Z中的MinChange是因為def中把Min改成了MinChange,所以lib中也進行了修改,但是這個MinChange符號實際上出現在dll文件的name列中。其實這也看出來了,def文件只是在loadlibrary這種運行時加載有效。
由于lib中的函數名變成了?MinChange@@YAHHH@Z,導致使用__declspec(dllimport)進行導入的啟動時加載,生成的?Min@@YAHHH@Z無法與?MinChange@@YAHHH@Z對應,而出現鏈接時的錯誤。所以不應該改變函數名,而應該在def文件中直接使用函數名,這樣啟動時加載和運行時加載都能夠順利進行。
同時從上面也可以看出NONAME和PRIVATE的作用的。
問題:試驗中使用DATA總是出錯,不知道怎么弄。














posted @ 2009-08-24 10:29 把握命運 閱讀(15777) | 評論 (1)編輯 收藏

WSAStartup簡單解釋

int WSAStartup (
  WORD
wVersionRequested
  LPWSADATA lpWSAData 
);
第一個參數是調用者能夠使用的最高版本號。
第二個參數中的前兩個成員中,第一個成員是sock dll返回的版本號,第二個參數是dll支持的最高版本號。

這個函數成功返回的條件是,第一個參數的版本號高于sock dll能夠支持的最低版本,那么就表示dll肯定支持調用者能夠使用的一個版本。在第二個參數中的第一個變量種返回第一個參數和dll支持的最高版本中的那個小的版本。
示例圖,有重疊,說明存在可以使用的版本。

第一行是調用者能夠使用的所有版本,第二行是dll支持的所有版本,而這個函數中的第一個參數是第一行中的最大版本。第二個參數中的第一個成員是重疊部分的最大的那個。如果沒有重疊部分,那么函數失敗。

posted @ 2009-08-24 09:51 把握命運 閱讀(336) | 評論 (0)編輯 收藏

2009年8月23日 #

線程同步的幾種方法

1.CreateMutex
   WaitForSingleObject
   RealseMutex

2.CreateThread中的臨界區

posted @ 2009-08-23 20:30 把握命運 閱讀(269) | 評論 (0)編輯 收藏

2009年8月20日 #

istream_iterator的自增

 

  // TEMPLATE CLASS istream_iterator
template<class _Ty,
 class _Elem = char,
 class _Traits = char_traits<_Elem>,
 class _Diff = ptrdiff_t>
 class istream_iterator
  : public iterator<input_iterator_tag, _Ty, _Diff,
   const _Ty *, const _Ty&>
 { // wrap _Ty extracts from input stream as input iterator
 typedef istream_iterator<_Ty, _Elem, _Traits, _Diff> _Myt;
public:
 typedef _Elem char_type;
 typedef _Traits traits_type;
 typedef basic_istream<_Elem, _Traits> istream_type;

#if _SECURE_SCL
 typedef _Range_checked_iterator_tag _Checked_iterator_category;
#endif

 istream_iterator()
  : _Myistr(0)
  { // construct singular iterator
  }

 istream_iterator(istream_type& _Istr)
  : _Myistr(&_Istr)
  { // construct with input stream
  _Getval();
  }

 const _Ty& operator*() const
  { // return designated value

 #if _HAS_ITERATOR_DEBUGGING
  if (_Myistr == 0)
   {
   _DEBUG_ERROR("istream_iterator is not dereferencable");
   _SCL_SECURE_OUT_OF_RANGE;
   }
 #else
  _SCL_SECURE_VALIDATE_RANGE(_Myistr != 0);
 #endif /* _HAS_ITERATOR_DEBUGGING */

  return (_Myval);
  }

 const _Ty *operator->() const
  { // return pointer to class object
  return (&**this);
  }

 _Myt& operator++()
  { // preincrement

 #if _HAS_ITERATOR_DEBUGGING
  if (_Myistr == 0)
   {
   _DEBUG_ERROR("istream_iterator is not incrementable");
   _SCL_SECURE_OUT_OF_RANGE;
   }
 #else
  _SCL_SECURE_VALIDATE_RANGE(_Myistr != 0);
 #endif /* _HAS_ITERATOR_DEBUGGING */

  _Getval();
  return (*this);
  }

 _Myt operator++(int)
  { // postincrement
  _Myt _Tmp = *this;
  ++*this;
  return (_Tmp);
  }

 bool _Equal(const _Myt& _Right) const
  { // test for iterator equality
  return (_Myistr == _Right._Myistr);
  }

protected:
 void _Getval()
  { // get a _Ty value if possible
  if (_Myistr != 0 && !(*_Myistr >> _Myval))
   _Myistr = 0;
  }

 static void _Xran()
  { // report an out_of_range error
  _THROW(out_of_range, "invalid istream_iterator");
  }

 istream_type *_Myistr; // pointer to input stream
 _Ty _Myval; // lookahead value (valid if _Myistr is not null)
 };

  // istream_iterator TEMPLATE OPERATORS
template<class _Ty,
 class _Elem,
 class _Traits,
 class _Diff> inline
 bool operator==(
  const istream_iterator<_Ty, _Elem, _Traits, _Diff>& _Left,
  const istream_iterator<_Ty, _Elem, _Traits, _Diff>& _Right)
 { // test for istream_iterator equality
 return (_Left._Equal(_Right));
 }

template<class _Ty,
 class _Elem,
 class _Traits,
 class _Diff> inline
 bool operator!=(
  const istream_iterator<_Ty, _Elem, _Traits, _Diff>& _Left,
  const istream_iterator<_Ty, _Elem, _Traits, _Diff>& _Right)
 { // test for istream_iterator inequality
 return (!(_Left == _Right));
 }

紅色部分就是重點了,其實這種迭代器不能自增,只是不斷把流中的元素放到自己所存的值里,當到達流末尾時,直接將判斷指針設為0。

posted @ 2009-08-20 12:45 把握命運 閱讀(1006) | 評論 (0)編輯 收藏

C++練習5作業

     摘要: //train.h#pragma once#include"stdafx.h"class Train{public:    Train(int seatNum);    virtual ~Train(void);    bool ...  閱讀全文

posted @ 2009-08-20 12:05 把握命運 閱讀(274) | 評論 (0)編輯 收藏

2009年8月19日 #

關于私有成員

以前一直理解錯誤,一直以為私有成員是對象的,不是類的,現在想想,自己真笨,編譯器怎么可能檢查到運行時的對象的私有成員是否被別的代碼使用了呢?編譯器能做的只能是檢查類的聲明和定義,所以私有成員是類的,也就是同類所有對象的,而不是某一個對象的。只要在同一個類聲明和成員函數定義體內,私有成員是可以隨便使用的。

posted @ 2009-08-19 22:57 把握命運 閱讀(180) | 評論 (0)編輯 收藏

2009年8月18日 #

__cdecl、__stdcall、__fastcall

     摘要: 1.這三個修飾符的基本意思   __cdecl:C調用方式,VC默認使用該方式,參數從右向左傳遞,參數個數可變,棧的初始和清理由調用者完成   __stdcall:標準調用方式,多種語言使用這種調用方式,參數從右向左傳遞,參數個數不可變,棧的初始和清理由被調用者完成   __fastcall:參數盡量使用寄存...  閱讀全文

posted @ 2009-08-18 23:05 把握命運 閱讀(1466) | 評論 (0)編輯 收藏

exe、dll的進入點,以及main、winmain、dllmain的關系

靜態鏈接的情況不考慮,因為這種情況就是把所有代碼合并到exe中,不需要進入點。

進入點就是系統在加載一個可執行代碼塊(主要是exe和dll)到內存的時候,系統將要調用的起始代碼的位置。

加載分為啟動時加載和運行時加載,這兩種說法主要是針對dll的,因為exe加載必然會創建一個新的進程,所以exe加載都是啟動時加載,就算是createprocess也應該說是啟動時加載。而dll分為兩種情況,第一種就是隨著exe的加載一起加載到內存的同一進程地址空間中,另一種則是exe中的代碼loadlibrary在運行時加載dll到當前exe的進程地址空間中。
無論上面哪種情況,只要加載,系統就會一定在加載的時候調用進入點代碼,所以加載方式與進入點完全不影響。

win sdk文檔中exe的進入點有兩個,一個是main,另一個是winmain,這個進入點是可以改的,但是在c運行環境下,連接器一般把進入點默認設置為mainCRTStartupWinMainCRTStartup,因為c運行時需要在代碼執行前進行一些別的工作,所以就修改為前面兩個c入口點,然后這兩個函數再分別調用main和winmain。c運行時需要作的特別工作就是初始化c運行時環境,包括靜態、全局變量和對象初始化。當main或者winmain返回時就又回到了前兩個函數中,這兩個函數的后半部分就是負責清理之前的初始化工作。

win sdk文檔中的dll的進入店是dllmain,同樣在c運行時下,改為_DllMainCRTStartup,系統加載dll時調用這個函數,然后這個函數做些初始化工作,再調用dllmain,然后返回_DllMainCRTStartup結束執行。此時,dll已經在進程的地址空間中了,該進程的exe可以使用dll中的代碼了。如果該dll是啟動時加載,那么在程序結束時會再次調用_DllMainCRTStartup進行清理之前dll初始化的工作,如果是通過loadlibrary來運行時加載dll,那么需要exe自己卸載dll,卸載的時候會再次調用_DllMainCRTStartup

 

posted @ 2009-08-18 18:50 把握命運 閱讀(1810) | 評論 (0)編輯 收藏

2009年8月12日 #

CreateFile和WriteFile

#include"windows.h"
#include
"tchar.h"

LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

HANDLE g_hFile;
HANDLE g_hFile1;
struct sMsg
{
    DWORD time;
    DWORD message;
}
;

    

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE ,LPTSTR lpCmdLine,int nCmdShow)
{
    
if(!hInstance) return 0;
    WNDCLASSEX wcex;
    wcex.style 
= CS_HREDRAW |    CS_OWNDC|CS_VREDRAW ;          //常用設置,這個設置定義類在遇到各種情況時的行為,不過都是些可有可無的東西
    wcex.lpszClassName = TEXT("FIRSTCLASS");                         //類名,必須存在,這是引用類的差不多唯一的標志,另一個是class atom
    wcex.hInstance = hInstance;                                                    //類所屬的模塊句柄,如果style中有CS_OWNDC,相反,如果是CS_CLASSDC的話,這個類就屬于這個進程
    wcex.lpszMenuName = NULL;                                               //這是個指向菜單資源的指針,如果是NULL的話,則沒有菜單
    wcex.hCursor = LoadCursor(NULL,IDC_ARROW);           //加載鼠標圖標,如果是NULL的話,系統沒有默認的鼠標圖標,因此圖標會出現未定義情況
    wcex.hIcon  = NULL;                                                               //系統會加載默認圖標
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpfnWndProc 
= WindowProc;
    wcex.cbClsExtra 
=0;                                                               //分配給類的額外內存,根本用不上,設為0
    wcex.cbWndExtra = 0;                                                        //分配給由這個類產生的所有窗口的每一個內存大小,用不上,0
    wcex.cbSize = sizeof(WNDCLASSEX);                             //類的大小,這個估計是以后擴展的時候用的吧,總共兩種,難道是用來區分普通類和擴展類???
    wcex.hIconSm = NULL;                                                          //小型圖標,NULL,系統知道如何處理,影響不了程序的正常運行

    
if(!RegisterClassEx(&wcex))                                //函數失敗,返回0,否則返回一個atom,這個atom是用來標記類的,但是用的不多,能用類名的地方,也能用這東西
    {
        
return 0;
    }


    g_hFile   
=   CreateFile(L"d:\\pe\\messagefile.txt",         //   file   to   open   
    GENERIC_WRITE,                     //   open   for   reading   
    FILE_SHARE_WRITE,               //   share   for   reading   
    NULL,                                     //   default   security   
    OPEN_ALWAYS,                   //   existing   file   only   
    FILE_ATTRIBUTE_NORMAL,   //   normal   file   
    NULL);   

    g_hFile1 
= CreateFile(L"messagefile1.txt",
        GENERIC_WRITE,
        FILE_SHARE_WRITE,
        NULL,
        OPEN_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL);

    
//下面的這個函數和CreateWindow是同一個,只是define了幾個參數而以,所以現在使用的CreateWindow就是CreateWindowEx
    HWND hWnd = CreateWindowEx(0L,_T("FIRSTCLASS"),_T("name"),WS_OVERLAPPEDWINDOW ,CW_USEDEFAULT,CW_USEDEFAULT,640,480,NULL,NULL,hInstance,NULL);
    
if(!hWnd)
    
{
        
return 0;
    }

        
    ShowWindow(hWnd,nCmdShow  );
    

    MSG msg 
= {0};
    DWORD nbuffer;
    
while(GetMessage(&msg,NULL,0,0))
    
{
        TranslateMessage(
&msg);

        sMsg smsg 
= {0};
        smsg.time 
= msg.time;
        smsg.message 
= msg.message;
        WriteFile(  g_hFile1,   
&smsg,   sizeof(smsg),   &nbuffer,   NULL  );  
        
        DispatchMessage(
&msg);
    }


    CloseHandle(g_hFile); 
    CloseHandle(g_hFile1);

    
return (int)msg.wParam;


}



LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    DWORD nbuffer;
    WriteFile( g_hFile,   
&uMsg,   sizeof(uMsg),   &nbuffer,   NULL  );   



    PAINTSTRUCT ps;
    HDC hdc;

    
switch(uMsg)
    
{
    
case WM_PAINT:
        hdc 
= BeginPaint(hWnd,&ps);
        EndPaint(hWnd,
&ps);
        
break;
    
case WM_DESTROY:
        PostQuitMessage(
0);
        
break;
    
default:
        
return DefWindowProc(hWnd,uMsg,wParam,lParam);
    }

    
return 0;
}

posted @ 2009-08-12 19:46 把握命運 閱讀(605) | 評論 (0)編輯 收藏

僅列出標題  下一頁
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美寡妇偷汉性猛交| 免费在线观看日韩欧美| 久久综合色88| 久久亚洲国产精品一区二区| 亚洲欧美日韩视频一区| 午夜精品区一区二区三| 欧美伊人影院| 蜜桃久久精品一区二区| 欧美大片在线看| 亚洲精品中文字幕在线| 一区二区三区久久| 正在播放欧美视频| 欧美专区在线观看一区| 一区二区毛片| 欧美在线一二三区| 欧美一区二区免费观在线| 欧美一级网站| 久久视频免费观看| 欧美精品首页| 国产精品日韩欧美综合| 韩国av一区二区三区| 亚洲福利国产精品| 在线综合亚洲欧美在线视频| 欧美在线三级| 亚洲国产精品久久| 日韩一级在线观看| 久久国产黑丝| 欧美三级电影精品| 久久riav二区三区| 欧美制服丝袜| 女女同性精品视频| 99在线精品观看| 久久成人精品| 欧美视频一区二区在线观看| 国产午夜精品麻豆| 在线一区免费观看| 欧美阿v一级看视频| 亚洲一区二区成人在线观看| 欧美成人免费视频| 好看的日韩av电影| 亚洲小少妇裸体bbw| 欧美激情精品久久久久久变态| 亚洲小说欧美另类婷婷| 欧美涩涩网站| 国产日韩欧美在线一区| 一区二区三区高清视频在线观看| 麻豆视频一区二区| 亚洲美女视频| 亚洲国产一区二区三区高清| 欧美一级专区| 国产精品日韩在线播放| 一区二区国产日产| 亚洲国产一区二区a毛片| 久久五月激情| 亚洲第一福利社区| 久久亚洲视频| 久久精品成人一区二区三区| 国产精品99免费看| 9久re热视频在线精品| 欧美黄色网络| 狂野欧美一区| 亚洲人成77777在线观看网| 亚洲一区二区精品视频| 久久亚洲精品网站| 香蕉乱码成人久久天堂爱免费| 欧美激情一区二区三区在线| 亚洲第一中文字幕在线观看| 老司机精品福利视频| 久久精品一区蜜桃臀影院| 国产精品自拍在线| 欧美有码视频| 久久精品视频va| 国产自产v一区二区三区c| 欧美专区在线观看| 久久精品综合| 亚洲精品永久免费精品| 亚洲伦理在线免费看| 欧美三级在线| 蜜臀91精品一区二区三区| 亚洲欧美日韩视频二区| 国产精品久久999| 香蕉久久夜色精品国产| 欧美影院在线| 亚洲国产专区| 一本色道久久综合狠狠躁的推荐| 国产精品你懂的| 久久人91精品久久久久久不卡| 久久久www| 99国内精品久久| 亚洲综合日韩中文字幕v在线| 国内精品嫩模av私拍在线观看 | 国产精品免费看久久久香蕉| 亚洲免费视频在线观看| 欧美亚洲一区| 亚洲人成艺术| 亚洲欧美日本另类| 亚洲国产一区二区在线| 亚洲神马久久| 亚洲国产精品成人一区二区 | 国产精品日韩在线观看| 国产亚洲一区二区三区在线观看| 久久免费高清| 欧美精品自拍| 久久精品噜噜噜成人av农村| 欧美国产日韩一区二区| 欧美在线日韩精品| 欧美精品日本| 麻豆精品网站| 国产欧美日本在线| 亚洲精品字幕| 亚洲国产日韩欧美在线图片| 亚洲一区二区三区四区中文| 亚洲三级视频在线观看| 午夜亚洲视频| 亚洲女优在线| 欧美日韩一区二区免费在线观看| 久久婷婷国产综合国色天香| 欧美日韩综合视频| 亚洲国产美国国产综合一区二区| 国产美女精品一区二区三区 | 久久精品人人爽| 欧美日韩精品免费观看视一区二区| 久久久97精品| 国产女主播一区二区| 夜夜嗨一区二区| av成人天堂| 欧美成人免费网| 欧美激情区在线播放| 国产在线成人| 久久成人国产精品| 久久五月激情| 国产亚洲综合在线| 先锋a资源在线看亚洲| 午夜欧美大尺度福利影院在线看 | 国产精品高清网站| 99re视频这里只有精品| 亚洲九九精品| 欧美激情日韩| 亚洲麻豆一区| 亚洲午夜久久久久久久久电影院| 欧美多人爱爱视频网站| 欧美激情区在线播放| 亚洲乱码精品一二三四区日韩在线| 麻豆91精品| 亚洲国产专区校园欧美| 亚洲毛片在线免费观看| 欧美国产免费| 亚洲精品在线三区| 亚洲一区免费观看| 国产精品激情av在线播放| 日韩视频永久免费观看| 日韩一级大片在线| 欧美四级电影网站| 亚洲欧美日韩另类| 久久综合中文字幕| 亚洲日产国产精品| 欧美色道久久88综合亚洲精品| 亚洲视频第一页| 老司机精品导航| 午夜精品成人在线| 国产精品午夜在线观看| 亚洲男女自偷自拍| 欧美成人黄色小视频| 另类激情亚洲| 韩国女主播一区二区三区| 老色批av在线精品| 宅男精品导航| 美女视频黄a大片欧美| 99re成人精品视频| 国产婷婷97碰碰久久人人蜜臀| 久久精品国产99国产精品澳门 | 一卡二卡3卡四卡高清精品视频| aa级大片欧美三级| 国产欧美日韩精品丝袜高跟鞋 | 一区二区自拍| 欧美美女视频| 亚洲一区二区三区在线播放| 久久在线视频| 亚洲一区在线观看免费观看电影高清| 国产美女诱惑一区二区| 免费观看日韩av| 亚洲欧美成人一区二区三区| 欧美激情第9页| 欧美自拍偷拍| 99精品国产在热久久婷婷| 国产伦精品一区| 欧美剧在线观看| 久久久久综合一区二区三区| 在线视频你懂得一区| 欧美高清视频一区二区| 欧美在线播放一区| 亚洲图片欧美日产| 亚洲精品国产无天堂网2021| 国产精品海角社区在线观看| 麻豆精品传媒视频| 久久精品99国产精品日本| 亚洲免费在线| 一区二区三区你懂的| 亚洲激情电影中文字幕| 久久午夜影视|