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

小明思考

高性能服務(wù)器端計算
posts - 70, comments - 428, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

     摘要: C++源文件編碼問題  閱讀全文

posted @ 2007-04-05 15:30 小明 閱讀(5856) | 評論 (6)編輯 收藏

     摘要: UltraEdit的一個Bug  閱讀全文

posted @ 2007-04-04 13:51 小明 閱讀(3152) | 評論 (5)編輯 收藏

     摘要: 如何讓指針指向自己  閱讀全文

posted @ 2007-04-04 12:16 小明 閱讀(3208) | 評論 (8)編輯 收藏

     摘要: Windbg(CDB) 新手指南  閱讀全文

posted @ 2007-03-13 14:39 小明 閱讀(9218) | 評論 (0)編輯 收藏

也許有人不知道CDB是什么,CDB是windbg的小兄弟,基于command line,對于我這個比較喜歡用command line的人,CDB比windbg更容易上手。

象GDB,CDB這些工具,命令都很多,但是我們只要熟記最常用的"三板斧"就可以工作了。

1.啟動
   1)直接調(diào)試:  
      gdb program [core]
      cdb program or cdb -z DumpFile
   2)attach方式
      gdb attach pid
      cdb -pn ExeName or cdb -p pid

2.顯示堆棧
   GDB: bt
   CDB: k

3. 設(shè)置斷點
   GDB: b [file:]line
   CDB: bp 'file:line'

4. 運行/繼續(xù)運行
   GDB: run [arglist] 
             c   繼續(xù)運行 
   CDB: g

5. 單步
   GDB : n (step over) s (step into)
   CDB : p

6. 打印變量的值
    GDB : p expr
    CDB: ? expr

說老實話,CDB過于復雜,學起來比GDB難.

BTW:用CDB之前設(shè)置一下symbol的path
set _NT_SYMBOL_PATH=srv*c:\symbols*http://msdl.microsoft.com/download/symbols
   
   

posted @ 2007-03-08 14:33 小明 閱讀(3988) | 評論 (0)編輯 收藏

     摘要: [STL] loop & erase   閱讀全文

posted @ 2006-12-27 18:01 小明 閱讀(9515) | 評論 (12)編輯 收藏

項目需要,寫了一個幫助L10N的工程師計算utf8的小工具(html page)。如下

<!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.0?Transitional//EN">
<HTML>
<HEAD>
<TITLE>?An?utf8?count?tool??</TITLE>
<meta?http-equiv="Content-Type"?content="text/html;?charset=utf16">
<script>
????
function?utf16to8(str)?{
????????
var?out,?i,?len,?c;

????????out?
=?"";
????????len?
=?str.length;
????????
for(i?=?0;?i?<?len;?i++)?{
????????c?
=?str.charCodeAt(i);
????????
if?((c?>=?0x0001)?&&?(c?<=?0x007F))?{
????????????out?
+=?str.charAt(i);
????????}?
else?if?(c?>?0x07FF)?{
????????????out?
+=?String.fromCharCode(0xE0?|?((c?>>?12)?&?0x0F));
????????????out?
+=?String.fromCharCode(0x80?|?((c?>>??6)?&?0x3F));
????????????out?
+=?String.fromCharCode(0x80?|?((c?>>??0)?&?0x3F));
????????}?
else?{
????????????out?
+=?String.fromCharCode(0xC0?|?((c?>>??6)?&?0x1F));
????????????out?
+=?String.fromCharCode(0x80?|?((c?>>??0)?&?0x3F));
????????}
????????}
????????
return?out;
????}
????
function?count()
????{
????????
var?temp?=?f1.value;
????????temp
=temp.replace(/\\r/g,"\r");
????????temp
=temp.replace(/\\n/g,"\n");
????????result.innerHTML
=utf16to8(temp).length;
????}
</script>
</HEAD>

<BODY>
<TEXTAREA?id="f1"?NAME="f1"?ROWS="10"?COLS="50"></TEXTAREA>
<br/>
<INPUT?TYPE="button"?value="count?length"?onclick="count()">
<div?id="result"></div>
</BODY>
</HTML>

posted @ 2006-11-08 13:32 小明 閱讀(2524) | 評論 (0)編輯 收藏

     摘要: snprintf的正確用法和錯誤用法  閱讀全文

posted @ 2006-09-29 10:27 小明 閱讀(34535) | 評論 (8)編輯 收藏

     摘要: 工程師必備  閱讀全文

posted @ 2006-09-28 15:30 小明 閱讀(5145) | 評論 (2)編輯 收藏

     摘要: 介紹識別字符編碼的小技巧  閱讀全文

posted @ 2006-09-27 10:00 小明 閱讀(3193) | 評論 (2)編輯 收藏

SendMessageTimeout并不是簡單在SendMessage加上Timeout的功能。

MSDN上面有一段文字是這樣說的

If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine. If the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure. Messages sent between threads are processed only when the receiving thread executes message retrieval code. The sending thread is blocked until the receiving thread processes the message. However, the sending thread will process incoming nonqueued messages while waiting for its message to be processed. To prevent this, use SendMessageTimeout with SMTO_BLOCK set. For more information on nonqueued messages, see Nonqueued Messages.


翻譯一下:

SendMessage : 如果指定窗口由調(diào)用線程創(chuàng)建,那么窗口過程會被當成一個子程序立即調(diào)用。如果指定窗口由另外一個線程創(chuàng)建,那么系統(tǒng)會切換到那個線程,并且調(diào)用合適的窗口過程。在線程之間傳遞的消息僅僅當接收線程執(zhí)行message retrieval code才會被處理。發(fā)送線程會被堵塞直到接收線程處理完消息。但是,發(fā)送線程在等待的同時會處理收到的nonqueued messages 。為了阻止這一點,使用帶有SMTO_BLOCK參數(shù) 的SendMessageTimeout .

=================================華麗的分割線===========================

我曾經(jīng)遇到這個問題,我調(diào)用SendMessage向另外一個線程窗口發(fā)message,本來以為他會一直block住,但是他卻調(diào)用了另外一個消息的處理程序,導致了行為不正確。所以一定要小心使用SendMessage發(fā)給其他線程的窗口。

我修改了一下,把
pWnd->SendMessage(MSG_LOG_MESSAGE, nMsgType, (LPARAM)(LPCTSTR)m_cstrMessage);
改成了
HWND hWnd = pWnd->GetSafeHwnd();
::SendMessageTimeout(hWnd,MSG_LOG_MESSAGE, nMsgType, (LPARAM)(LPCTSTR)m_cstrMessage,SMTO_BLOCK,15000,0);
解決了這個bug.

posted @ 2006-07-21 09:50 小明 閱讀(10389) | 評論 (5)編輯 收藏

     摘要: 介紹兩個用于C/C++/Java格式化的工具  閱讀全文

posted @ 2006-07-14 16:32 小明 閱讀(6360) | 評論 (3)編輯 收藏

     摘要: 使用標準庫應該記住的一些東西(21條)  閱讀全文

posted @ 2006-07-12 11:19 小明 閱讀(5689) | 評論 (14)編輯 收藏

在linux/Unix平臺上面做G11N的開發(fā),大抵都會用到gettext庫/工具集( ftp://ftp.gnu.org/gnu/gettext/ ) 和libiconv(http://www.gnu.org/software/libiconv/) ,前者是用于實現(xiàn)Resource bundle,而后者用于各種編碼轉(zhuǎn)化。

(注:這里沒有考慮cross-platform)


1. 實現(xiàn)方法

a . 使用po文件作為資源文件 (建議編碼是utf-8)
    一方面因為UTF-8兼容ANSI,另外一方面考慮到G11N的程序大部分使用utf-8輸出,比如輸出到database,web UI, file等等。

b. 使用getext從resource file ( mo文件)讀到相應的L10N resource文件
   注意這里需要先setlocale來設(shè)置locale
#include <stdio.h>
#include 
<locale.h>
#include 
<libintl.h>

#define _(string) gettext (string)

int main(int argc, char **argv)
{
    
if (setlocale(LC_ALL, “”) == NULL) {
        fprintf(stderr, “setlocale() error.\n”);
        
return -1;
}
if (bindtextdomain(package, “/usr/share/locale”) == NULL) {
    fprintf(stderr, “bindtextdomain() error.\n”);
    
return –1;
}
    
if (textdomain(package) == NULL) {
        fprintf(stderr, “textdomain() error.\n”);
        
return –1;
}
    printf(“
%s\n”, _(“Hello, world!”));
    
return 0;
}


c.如果要輸出到控制臺(console),因為不是console都支持unicode output,所以推薦的方法是首先是把utf-8轉(zhuǎn)化為本地編碼,然后使用printf輸出。不推薦使用wprintf進行輸出,一方面是因為wchar_t的大小隨編譯器不同,不好控制。另外一方面,很多wprintf的實現(xiàn)也都是先把wchar_t[]轉(zhuǎn)為本地編碼,然后輸出。轉(zhuǎn)化編碼使用libconv

d.如果要輸出到web pages,database,file,編碼推薦使用utf-8.

e.如果要輸出本地化的日期和時間,使用API: strftime
#include <stdio.h>
#include 
<time.h>
int main(int argc, char **argv) 
{
    time_t t;
    
struct tm *ptm;
    
char buffer[100];

    memset(buffer, 
0sizeof(buffer));
    
if (time(&t) < 0) {
        fprintf(stderr, “time() error: 
%m\n”);
    }
    
if ((ptm = localtime(&t)) == NULL) {
        fprintf(stderr, “localtime() error: 
%m\n”);
    }
    strftime(buffer, 
sizeof(buffer), “%%X”, ptm);
    printf(“
%s\n”, buffer);
    
return 0;
}


f. 如果要輸出本地化的數(shù)字和貨幣,使用API: strfmon
#include <stdio.h>
#include 
<monetary.h>

int main(int argc, char **argv)
{
    
char buffer[100];
    strfmon(buffer, 
sizeof(buffer), “%=*i", 12345.67);
    printf(“%s\n”, buffer);
    
return 0;
}


2.目錄結(jié)構(gòu)
/product
  /i18n
      /zh_TW
          your.mo
      /ja_JP 
          your.mo

posted @ 2006-06-26 16:57 小明 閱讀(1504) | 評論 (0)編輯 收藏

1. printf 只能提供ANSI/MB 的輸出,不支持輸出unicode stream.
例如:
wchar_t?test[]=L"測試1234";
printf(
"%s",test);
是不會正確輸出的


2.wprintf 同樣不會提供unicode output,
?? 但是他會把wchar_t的string轉(zhuǎn)為locale的SB/MB字符編碼,然后輸出
例如:
wchar_t?test[]?=?L"測試Test";
wprintf(L
"%s",test);
會輸出??1234之類的字符串,或者不輸出任何結(jié)果
因為wprintf沒有辦法把L"測試Test"轉(zhuǎn)為默認的ANSI,需要設(shè)置locale
setlocale(LC_ALL,"chs");
wchar_t?test[]?
=?L"測試Test";
wprintf(L
"%s",test);
會有正確的輸出
等同于printf("%ls",test);

綜上:? CRT I/O functions do not provide Unicode output.

3. Window console自從NT4就是一個真正的unicode console
不過輸出unicode string,只有使用Windows API, WriteConsoleW
例如:
wchar_t?test[]?=?L"測試1234";
DWORD?ws;
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),test,wcslen(test),
&ws,NULL);
可以正確的輸出而不需要設(shè)置locale,因為是真正的unicode的輸出,跟codepage無關(guān)

4. 如何實現(xiàn)跨平臺的console output
??? 不要使用wchar_t和wprintf,因為這些都依賴于編譯器.
???? ICU是IBM的一個成熟的跨平臺支持unicode的libary,推薦使用

以下是ICU的uprintf實現(xiàn)

void?uprintf(const?UnicodeString?&str)?{
????
char?*buf?=?0;
????int32_t?len?
=?str.length();
????int32_t?bufLen?
=?len?+?16;
????int32_t?actualLen;
????buf?
=?new?char[bufLen?+?1];
????actualLen?
=?str.extract(0,?len,?buf/*,?bufLen*/);?//?Default?codepage?conversion
????buf[actualLen]?=?0;
????printf(
"%s",?buf);
????delete?buf;
}
它也是先把Unicode string轉(zhuǎn)化為本地的codepage,然后printf,雖然也不是unicode output,但是跨平臺,大多數(shù)情況會工作得很好。

posted @ 2006-06-21 11:53 小明 閱讀(18417) | 評論 (5)編輯 收藏

     摘要: Globalization development   閱讀全文

posted @ 2006-06-19 19:45 小明 閱讀(1652) | 評論 (1)編輯 收藏

很久以前寫的五子棋代碼(Use MFC),支持人機對戰(zhàn),發(fā)上來玩玩

source:?? http://m.shnenglu.com/Files/sandy/Five_src.rar

bin: ? http://m.shnenglu.com/Files/sandy/Five_bin.rar


picture:

chess.jpg

posted @ 2006-05-12 16:19 小明 閱讀(1721) | 評論 (2)編輯 收藏

在windows的世界里面,很少有API沒有返回值。但是到底返回什么代表成功,這個沒有標準。我發(fā)現(xiàn)主要有三種模式

1 . 返回非0表示成功,返回0表示失敗

大多數(shù)Win32 Platform API都是這樣,比如

int?result?=MoveFileEx(szTempName,?
????????????????????
"allcaps.txt",?
????????????????????MOVEFILE_REPLACE_EXISTING);

if(!result)
????{?
????????printf(
"Could?not?move?file.?error:%d",GetLastError());
????????
return?0;
????}

使用這種方法。你必須提供類似GetLastError的取錯誤的方法,而且你必須保證這個函數(shù)是thread-safe的,每個線程能維護自己的錯誤信息。

2. 返回大于等于0表示成功,返回-1表示失敗
socket api大部分是這樣設(shè)計的

while(?bytesRecv?!=?SOCKET_ERROR?)?{
????bytesRecv?
=?recv(?ConnectSocket,?recvbuf,?32,?0?);
????
if?(?bytesRecv?==?0?||?bytesRecv?==?WSAECONNRESET?)?{
??????printf(?
"Connection?Closed.\n");
??????
break;
????}
????printf(?
"Bytes?Recv:?%ld\n",?bytesRecv?);
??}

這樣的好處是返回值就可以用來表示成功和狀態(tài)。比如這里的recv就可以返回收到的字節(jié)數(shù)。但是你還是要有一個查詢錯誤的API,like WSAGetLastError().

3.返回0表示成功

COM的接口大部分是這樣設(shè)計的
if(?FAILED(lpdd->QueryInterface(IID_IDirectDraw7,?(LPVOID?*)?&lpdd)))
????{
??????????
//error?handle?and?return
????}





其他的一些考慮

1.如何定義錯誤值?
簡單的一點使用宏連續(xù)定義,like
#define?E_NO_FILE?1
#define?E_BAD_FILE?2
復雜的一點就像COM,嚴格的定義每一位的意義
這種情況下你可以提供一個宏來創(chuàng)建錯誤代碼,like
#define?MAKE_HRESULT(sev,fac,code)\

(?(HRESULT)?(((unsigned?
long)(sev)<<31)?|?((unsigned?long)(fac)<<16)?\

|?((unsigned?long)(code)))?)

2.可以提供一個宏或者函數(shù)來幫助判斷是否成功
比如COM提供了FAILED宏來幫助你判斷COM的返回值
#define?FAILED(Status)?????((HRESULT)(Status)<0)

3.如果只有錯誤和成功兩個返回值,考慮使用bool來返回
這個適用于C++,優(yōu)點是意義很清晰.返回 true就是成功,false就是失敗.

4.要使用異常來表示錯誤的狀態(tài)么?
使用異常的好處就是返回值被省出來了,可以不返回或者返回其他信息,還有益于定義錯誤類型和簡化程序流程。缺點就是C++對異常支持還不夠好,沒有finally,每一家編譯器支持也不一樣,實現(xiàn)可能大不同.

posted @ 2006-04-25 16:55 小明 閱讀(2414) | 評論 (2)編輯 收藏

#include? < stdio.h >

int ?main()
{
????
int ?a = 10 ,b = 20 ;

????a
= (a + b) - (b = a);

????printf(
" a=%d,b=%d\n " ,a,b);
????
????
return ? 0 ;
}

很簡單,交換a和b的值

在debug模式下,輸出
a=20,b=10

在release模式下,輸出
a=10,b=10

I think there is a bug in release version.

posted @ 2006-04-24 18:08 小明 閱讀(2026) | 評論 (21)編輯 收藏

最近在使用金山詞霸2005,由于金山詞霸2005在啟動的時候會發(fā)一個UDP包到局域網(wǎng),然后檢測是否有相同序列號的金山詞霸,如果發(fā)現(xiàn)則要求退出。甚為無奈。windows 2000自帶有防火墻的功能,但是只有Permit all 和 Permit only兩種模式,居然沒有Deny only,奇怪。

所以我就查了一下MSDN,發(fā)現(xiàn)有Routing and Remote Access Service一類的API可以用。
于是程序的流程就是這樣
1.設(shè)置臨時防火墻,以阻擋發(fā)到端口11113的UDP包
2.啟動金山詞霸
3.刪除設(shè)置

代碼:


#include?
<stdlib.h>
#include?
<Iphlpapi.h>
#include?
<Fltdefs.h>

#pragma?comment(lib,?
"Iphlpapi.lib")

const?int?XDICT_PORT?=?11113;

unsigned?
long?CharToIp(const?char?*sIp)
{
????
int?octets[4];
????
int?i;
????
const?char?*?auxCad?=?sIp;
????unsigned?
long?lIp?=?0;
????
????
//we?extract?each?octet?of?the?ip?address
????
//atoi?will?get?characters?until?it?found?a?non?numeric?character(in?our?case?'.')
????for(i?=?0;?i?<?4;?i++)
????{
????????octets[i]?
=?atoi(auxCad);

????????
if(octets[i]?<?0?||?octets[i]?>?255)
????????????
return?0;

????????lIp?
|=?(octets[i]?<<?(i*8));

????????
//update?auxCad?to?point?to?the?next?octet
????????auxCad?=?strchr(auxCad,?'.');

????????
if(auxCad?==?NULL?&&?i!=3)
????????????
return?-1;

????????auxCad
++;
????}
????
return?lIp;
}

int?APIENTRY?WinMain(HINSTANCE?hInstance,
?????????????????????HINSTANCE?hPrevInstance,
?????????????????????LPSTR?????lpCmdLine,
?????????????????????
int???????nCmdShow)
{
????
//first?get?adapter?info
????PIP_ADAPTER_INFO?pAdapterInfo?=?NULL,tmp;
????unsigned?
long?len?=?0;
?????GetAdaptersInfo(pAdapterInfo,
&len);
????pAdapterInfo?
=?(PIP_ADAPTER_INFO)?malloc?(len);
????DWORD?result?
=?GetAdaptersInfo(pAdapterInfo,?&len);
????
if(result!=ERROR_SUCCESS)
????{
????????MessageBox(NULL,
"Fail?to?call?GetAdaptersInfo","ERROR",MB_OK);
????????
return?-1;
????}

????
//create?filters?interface
????INTERFACE_HANDLE?hInterface?=?NULL;
????result?
=?PfCreateInterface(0,PF_ACTION_FORWARD,PF_ACTION_FORWARD,FALSE,TRUE,&hInterface);
????
if(result!=NO_ERROR)
????{
????????MessageBox(NULL,
"Fail?to?call?PfCreateInterface","ERROR",MB_OK);
????????
return?-1;
????}

????
//add?the?filter?to?adapter
????unsigned?long?dmp?=?0;
????PF_FILTER_DESCRIPTOR?ipFlt;
????ipFlt.dwFilterFlags?????
=?0;
????ipFlt.dwRule????????????
=?0;
????ipFlt.pfatType??????????
=?PF_IPV4;
????ipFlt.dwProtocol????????
=?FILTER_PROTO_UDP;
????ipFlt.fLateBound????????
=?0;
????ipFlt.wSrcPort??????????
=?0;
????ipFlt.wSrcPortHighRange?
=?0;
????ipFlt.wDstPort??????????
=?XDICT_PORT;
????ipFlt.wDstPortHighRange?
=?XDICT_PORT;
????ipFlt.SrcAddr?
=?(PBYTE)&dmp?;
????ipFlt.SrcMask?
=?(PBYTE)&dmp;
????ipFlt.DstAddr?
=?(PBYTE)&dmp;
????ipFlt.DstMask?
=?(PBYTE)&dmp;

????
//bind
????IP_ADDR_STRING?*localIp;
????
for(tmp=pAdapterInfo;tmp?!=?NULL;tmp=tmp->Next)
????{
????????????
//?each?ip?of?a?adapter
????????????for(localIp=&tmp->IpAddressList;localIp!=NULL;localIp=localIp->Next)
????????????{
????????????????unsigned?
long?ul?=?CharToIp(localIp->IpAddress.String);
????????????????PBYTE?lIp?
=?(PBYTE)&ul;
????????????????PfBindInterfaceToIPAddress(hInterface,?PF_IPV4,?lIp);
????????????}
????}

????result?
=?PfAddFiltersToInterface(hInterface,1,&ipFlt,1,&ipFlt,NULL);
????
if(result!=NO_ERROR)
????{
????????MessageBox(NULL,
"Fail?to?call?PfAddFiltersToInterface","ERROR",MB_OK);
????????
return?-1;
????}

????
//start?XDict
????STARTUPINFO?si;
????PROCESS_INFORMATION?pi;
????ZeroMemory(?
&si,?sizeof(si)?);
????si.cb?
=?sizeof(si);
????ZeroMemory(?
&pi,?sizeof(pi)?);
????::CreateProcess(NULL,
"XDICT.exe",
????????NULL,?????????????
//?Process?handle?not?inheritable.?
????????NULL,?????????????//?Thread?handle?not?inheritable.?
????????FALSE,????????????//?Set?handle?inheritance?to?FALSE.?
????????0,????????????????//?No?creation?flags.?
????????NULL,?????????????//?Use?parent's?environment?block.?
????????NULL,?????????????//?Use?parent's?starting?directory.?
????????&si,??????????????//?Pointer?to?STARTUPINFO?structure.
????????&pi?);????????????//?Pointer?to?PROCESS_INFORMATION?structure.

????
//?Wait?until?child?process?exits.
????WaitForSingleObject(?pi.hProcess,?INFINITE?);
????
//?Close?process?and?thread?handles.?
????CloseHandle(?pi.hProcess?);
????CloseHandle(?pi.hThread?);


????
//remove?filter
????for(tmp=pAdapterInfo;tmp?!=?NULL;tmp=tmp->Next)
????{
????????result?
=?PfRemoveFiltersFromInterface(hInterface,1,&ipFlt,1,&ipFlt);
????????
if(result!=NO_ERROR)
????????{
????????????MessageBox(NULL,
"Fail?to?call?PfRemoveFiltersFromInterface","ERROR",MB_OK);
????????????
return?-1;
????????}
????}
????PfUnBindInterface(hInterface);?
????PfDeleteInterface(hInterface);

????
//free
????free(pAdapterInfo);
????
return?0;
}

使用的API有
GetAdapaterInfo --- 取得網(wǎng)卡的信息,如ip
PfCreateInterface ----Create一個Filter Interface
PfBindInterfaceToIPAddress ----綁定Filter Interface到IP
PfAddFiltersToInterface ----增加Filter到Interface
PfRemoveFiltersFromInterface ---Remove Filter
PfUnBindInterface---取消綁定到ip
PfDeleteInterface---刪除Filter Interface


附上可執(zhí)行文件: http://m.shnenglu.com/Files/sandy/XDictWrapper.zip
使用的時候解壓放在金山詞霸同一個目錄就可以了,然后通過這個程序來啟動金山詞霸。

posted @ 2006-04-19 16:53 小明 閱讀(3810) | 評論 (6)編輯 收藏

僅列出標題
共4頁: 1 2 3 4 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲激情第一区| 久久久久久久999精品视频| 欧美成人自拍| 久久久精品国产99久久精品芒果| 亚洲性视频网址| 亚洲午夜性刺激影院| 亚洲午夜激情网页| 午夜精品久久久久99热蜜桃导演| 欧美一区二区视频在线| 久久久999国产| 亚洲国产精品传媒在线观看| 亚洲综合色自拍一区| 午夜国产欧美理论在线播放 | 国产精品久久777777毛茸茸| 国产精品第一区| 国产专区欧美专区| 亚洲精品国产无天堂网2021| 亚洲一区国产| 久久婷婷激情| 亚洲毛片网站| 香蕉久久夜色精品国产使用方法| 久久先锋资源| 国产精品国产三级国产| 黄色成人av网| 一区二区三区免费观看| 久久香蕉国产线看观看av| 亚洲欧洲日韩女同| 午夜一级久久| 欧美精选午夜久久久乱码6080| 国产精品专区h在线观看| 亚洲精品国产品国语在线app | 国产综合色精品一区二区三区| 亚洲日本一区二区三区| 性做久久久久久久久| 亚洲欧洲精品一区二区三区| 性欧美18~19sex高清播放| 欧美好骚综合网| 在线观看日韩国产| 香蕉久久夜色精品国产| 亚洲高清二区| 久久久亚洲欧洲日产国码αv| 国产精品久久久久久av福利软件| 亚洲欧洲三级电影| 免费观看欧美在线视频的网站| 亚洲欧美另类久久久精品2019| 欧美日韩亚洲精品内裤| 亚洲精品一区二区三区蜜桃久| 欧美电影美腿模特1979在线看 | 欧美精品少妇一区二区三区| 狠狠色综合播放一区二区| 午夜精品久久久久久久99樱桃| 亚洲欧洲精品一区二区| 欧美成人中文字幕在线| 亚洲高清免费在线| 免费日韩av电影| 久久久成人网| 激情综合自拍| 久久夜色撩人精品| 久久久久久久综合狠狠综合| 娇妻被交换粗又大又硬视频欧美| 久久精品国产视频| 欧美一区高清| 亚洲人精品午夜| 午夜精品网站| 一区二区日本视频| 欧美日韩一区二区视频在线| 9人人澡人人爽人人精品| 欧美激情国产日韩精品一区18| 久久久久久久性| 亚洲黄色av一区| 亚洲国产成人在线播放| 欧美激情欧美激情在线五月| 一本色道久久88综合日韩精品 | 宅男噜噜噜66一区二区| 亚洲美女在线观看| 欧美午夜精品久久久久免费视| 亚洲欧美国产精品va在线观看| 亚洲男人第一av网站| 国产亚洲一区二区三区在线播放| 久久亚洲私人国产精品va| 美女视频黄 久久| 一区二区欧美亚洲| 一区二区福利| 国产亚洲一区二区三区在线观看| 免费短视频成人日韩| 欧美精品九九| 欧美有码在线观看视频| 久热精品视频| 亚洲一区免费看| 欧美一区二区视频免费观看 | 久久av红桃一区二区小说| 欧美一区午夜精品| 99精品久久| 性做久久久久久久久| 亚洲精品美女在线观看| 亚洲五月六月| 亚洲高清中文字幕| 9久草视频在线视频精品| 韩国一区二区三区美女美女秀| 亚洲激情影院| 国产亚洲一区二区三区在线观看| 亚洲国产欧美日韩精品| 国产亚洲福利| 日韩视频在线一区二区三区| 好吊色欧美一区二区三区视频| 日韩小视频在线观看| 狠狠综合久久av一区二区老牛| 99re国产精品| 亚洲高清毛片| 欧美中文在线观看| 亚洲一区二区在线视频| 免费在线看一区| 久久久免费精品| 欧美日韩国产精品一区| 麻豆精品视频在线观看| 国产精品久久毛片a| 最新国产乱人伦偷精品免费网站| 国内精品久久久久久久影视麻豆 | 亚洲三级观看| 在线观看免费视频综合| 亚洲综合色自拍一区| 亚洲第一精品影视| 亚洲日本成人| 欧美一区二区在线| 亚洲欧美日韩中文在线制服| 欧美国产综合一区二区| 久久综合色综合88| 国产午夜精品一区二区三区视频 | 亚洲精品资源美女情侣酒店| 欧美一区二区播放| 亚洲男人第一av网站| 欧美日韩另类丝袜其他| 亚洲国产精品电影| 亚洲精品国产视频| 欧美大片在线观看一区二区| 亚洲国产精品久久久久秋霞影院| 亚洲成人中文| 麻豆久久久9性大片| 欧美国产精品劲爆| 亚洲国产精品高清久久久| 久久蜜臀精品av| 欧美不卡高清| 亚洲区在线播放| 欧美激情91| 日韩视频在线观看一区二区| 亚洲视频免费看| 国产精品美女久久久久久免费 | 国产一区欧美日韩| 欧美一区2区视频在线观看| 久久都是精品| 一区二区三区在线免费观看| 久久久亚洲一区| 亚洲高清在线视频| 一区二区免费看| 国产精品毛片大码女人| 欧美一级午夜免费电影| 欧美大片一区| av成人免费| 国产精品夜色7777狼人| 久久av一区二区| 亚洲国产高潮在线观看| 亚洲一区三区在线观看| 国产一区高清视频| 欧美电影免费观看网站| 夜夜嗨av一区二区三区四季av| 亚洲欧美综合v| 雨宫琴音一区二区在线| 欧美日韩a区| 欧美影院在线播放| 91久久精品视频| 先锋亚洲精品| 亚洲精品美女免费| 国产欧美日韩亚洲一区二区三区| 久久综合一区二区| 亚洲午夜影视影院在线观看| 裸体女人亚洲精品一区| 亚洲一区二区三区免费在线观看| 韩国成人精品a∨在线观看| 欧美日韩免费在线观看| 久久免费一区| 亚洲一区二区三区精品在线| 欧美风情在线| 久久精品天堂| 亚洲永久免费av| 一区二区三区在线免费观看| 欧美一区二区三区四区夜夜大片| 在线观看欧美亚洲| 国产精品久久国产精麻豆99网站| 久久电影一区| 99re亚洲国产精品| 欧美二区在线| 久久久久久9| 亚洲在线一区二区| 亚洲毛片在线| 伊人婷婷欧美激情| 国产精品天天看| 欧美日韩国产精品一卡| 欧美14一18处毛片| 久久综合色8888| 久久国内精品视频|