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

把握命運,追逐夢想

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

統計

留言簿(1)

閱讀排行榜

評論排行榜

2011年4月22日 #

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

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

posted @ 2011-04-22 09:02 把握命運 閱讀(645) | 評論 (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 把握命運 閱讀(15787) | 評論 (1)編輯 收藏

WSAStartup簡單解釋

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

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

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

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

2009年8月23日 #

線程同步的幾種方法

1.CreateMutex
   WaitForSingleObject
   RealseMutex

2.CreateThread中的臨界區

posted @ 2009-08-23 20:30 把握命運 閱讀(273) | 評論 (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 把握命運 閱讀(1016) | 評論 (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 把握命運 閱讀(280) | 評論 (0)編輯 收藏

2009年8月19日 #

關于私有成員

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

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

2009年8月18日 #

__cdecl、__stdcall、__fastcall

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

posted @ 2009-08-18 23:05 把握命運 閱讀(1476) | 評論 (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 把握命運 閱讀(1821) | 評論 (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 把握命運 閱讀(610) | 評論 (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>
            亚洲欧美日韩成人| 久久精品国产一区二区电影| 亚洲成色精品| 欧美激情aⅴ一区二区三区| 亚洲国产免费| 亚洲破处大片| 国产精品视频不卡| 久久久久久久999| 久久精品视频导航| 亚洲丁香婷深爱综合| 亚洲欧洲日本专区| 国产精品久久久久高潮| 久久免费视频网| 模特精品在线| 西西裸体人体做爰大胆久久久| 欧美一级久久久| 亚洲精品一区二区三区婷婷月| 一区二区三区国产在线观看| 国产亚洲精品bt天堂精选| 免费不卡中文字幕视频| 欧美久久一级| 久久亚洲视频| 欧美日韩在线另类| 麻豆精品精华液| 欧美视频在线一区| 蜜臀av在线播放一区二区三区| 欧美日韩一区二区在线视频| 久久狠狠一本精品综合网| 欧美福利影院| 久久久综合免费视频| 欧美剧在线免费观看网站| 久久久久久久综合色一本| 欧美日韩国产色视频| 久久人91精品久久久久久不卡 | 欧美一区二区视频在线观看| 久久综合久久综合这里只有精品| 亚洲一区二区三区精品在线| 狂野欧美一区| 欧美在线播放高清精品| 欧美国产欧美亚洲国产日韩mv天天看完整 | ●精品国产综合乱码久久久久| 亚洲美女诱惑| 亚洲国产视频一区| 小嫩嫩精品导航| 亚洲一区二区三区在线播放| 久久综合色天天久久综合图片| 亚洲欧美中文另类| 欧美精品黄色| 欧美第一黄色网| 黄色在线成人| 久久久91精品国产一区二区三区 | 在线午夜精品自拍| 久久婷婷综合激情| 久久精品国产99国产精品澳门| 欧美日韩在线一区二区| 亚洲日本激情| 亚洲免费电影在线| 你懂的国产精品| 噜噜噜91成人网| 国产一区二区三区在线播放免费观看 | 久久久久99精品国产片| 国产精品一区二区三区免费观看| 一区二区欧美在线| 一本色道久久加勒比精品| 欧美成人免费在线视频| 欧美粗暴jizz性欧美20| 亚洲高清一区二| 蜜臀91精品一区二区三区| 欧美成人在线免费观看| 亚洲第一综合天堂另类专| 久久在线观看视频| 亚洲国产成人在线播放| 亚洲免费观看| 欧美性一区二区| 午夜精品久久久久久久| 久久久久久九九九九| 伊人久久婷婷色综合98网| 老司机成人网| 日韩一级二级三级| 亚洲欧美在线高清| 国产一区二区三区免费不卡| 久久免费视频在线| 亚洲日本一区二区| 午夜亚洲影视| 激情一区二区| 欧美日本在线视频| 亚洲一区二区在| 久久这里只有| 9国产精品视频| 国产精品久久久久毛片大屁完整版| 亚洲综合日韩中文字幕v在线| 欧美在线综合视频| 亚洲国产91色在线| 欧美偷拍另类| 久久精品一区二区三区不卡牛牛| 美女精品网站| 亚洲欧美www| 伊人成人在线| 欧美视频一区二区三区四区| 欧美在线视频日韩| 亚洲精品裸体| 美日韩在线观看| 亚洲一区二区三区久久| 国产亚洲综合性久久久影院| 欧美精品激情blacked18| 香蕉尹人综合在线观看| 亚洲国产另类久久久精品极度| 亚洲一区二区在线免费观看| 亚洲高清在线| 国产偷国产偷亚洲高清97cao| 欧美成人一区二区三区片免费| 一区二区三区精密机械公司| 免费成人性网站| 欧美在线三区| 一区二区三欧美| 激情成人中文字幕| 国产精品一卡| 欧美日韩一区二区精品| 久久久久青草大香线综合精品| 一区二区三区欧美日韩| 亚洲黄色一区二区三区| 久久裸体视频| 久久精品导航| 欧美一区二区三区精品 | 在线日韩av| 国产在线视频欧美| 国产精品日韩精品| 欧美日韩久久不卡| 欧美成人一区二区三区在线观看| 久久成人综合视频| 性色av一区二区怡红| 亚洲一区二区三区在线观看视频| 日韩视频国产视频| 亚洲人成在线播放| 亚洲电影免费观看高清完整版| 免费试看一区| 男人的天堂亚洲| 麻豆freexxxx性91精品| 久久手机免费观看| 久久久久欧美精品| 久久蜜桃精品| 蜜桃av一区二区三区| 麻豆成人小视频| 免费一级欧美片在线观看| 麻豆91精品91久久久的内涵| 久久久久久久久一区二区| 久久久久99| 免费人成精品欧美精品| 欧美激情偷拍| 亚洲激情一区二区三区| 日韩亚洲欧美高清| 一区二区三区鲁丝不卡| 亚洲一区日韩| 性色av一区二区怡红| 久久人人97超碰人人澡爱香蕉| 久久噜噜噜精品国产亚洲综合| 久久综合久久综合久久综合| 欧美电影免费观看网站| 欧美调教vk| 国内精品视频在线播放| 在线播放日韩专区| 洋洋av久久久久久久一区| 亚洲自拍偷拍麻豆| 久久尤物视频| 亚洲欧洲日产国码二区| 亚洲尤物精选| 另类人畜视频在线| 国产精品爱久久久久久久| 国产精品永久入口久久久| 尤物九九久久国产精品的特点| 91久久中文| 羞羞视频在线观看欧美| 老巨人导航500精品| 亚洲精品免费在线观看| 午夜精品久久久久久久99水蜜桃| 六月天综合网| 国产精品区免费视频| 亚洲国产成人在线| 亚洲欧美一区二区精品久久久| 欧美91精品| 亚洲免费视频在线观看| 免费久久精品视频| 国产精品自在线| 亚洲精品影院| 久久在线视频在线| 夜夜嗨av一区二区三区四季av | 蜜臀久久99精品久久久久久9 | 国产亚洲一区二区精品| 亚洲作爱视频| 免费成人激情视频| 亚洲一区久久| 欧美精品一级| 在线观看不卡av| 欧美一级久久久| 亚洲另类一区二区| 美女亚洲精品| 国模精品一区二区三区| 亚洲免费在线精品一区| 亚洲日本va午夜在线电影| 久久婷婷麻豆|