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

小明思考

高性能服務(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>
            亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 亚洲视频一区| 国产精品美女主播| 欧美成人免费va影院高清| 久久都是精品| 久久久久久穴| 久久综合激情| 久久免费视频网| 免费久久久一本精品久久区| 久久频这里精品99香蕉| 久久久久91| 欧美经典一区二区| 国产伦精品一区二区三区照片91 | 免费欧美高清视频| 欧美激情一区二区三区在线| 亚洲自啪免费| 国产精品免费一区二区三区观看| 欧美日韩精品在线| 国产精品视屏| 亚洲福利在线看| 亚洲男人第一网站| 久久久综合视频| 亚洲毛片在线观看.| 精久久久久久| 亚洲婷婷综合色高清在线| 欧美亚洲综合网| 亚洲国产视频一区| 一本大道久久a久久精二百| 在线视频亚洲| 欧美大片在线观看| 国产欧美一级| 亚洲资源av| 亚洲福利在线看| 欧美一区视频| 国产精品三级视频| 欧美专区在线观看一区| 亚洲精选在线| 先锋影音久久| 一本一道久久综合狠狠老精东影业 | 亚洲精品一区二区网址| 久久久精品国产免大香伊| 亚洲三级免费观看| 性色av香蕉一区二区| 国产精品露脸自拍| 亚洲伊人伊色伊影伊综合网| 亚洲日本va在线观看| 久热re这里精品视频在线6| 国产一区二区主播在线| 性久久久久久久久久久久| 99riav国产精品| 国产精品久久午夜| 久久精品99国产精品| 午夜精品一区二区三区在线播放| 欧美性开放视频| 欧美一区二区三区免费在线看| 久久久成人精品| 国产一级一区二区| 欧美风情在线观看| 欧美啪啪一区| 欧美一区二区三区四区高清| 亚洲一区999| 在线欧美不卡| 夜夜嗨av色一区二区不卡| 国产精品网站在线| 麻豆av福利av久久av| 欧美日韩亚洲国产一区| 欧美在线精品免播放器视频| 久久久一本精品99久久精品66| 亚洲欧洲日产国产网站| 亚洲欧美综合国产精品一区| 亚洲经典视频在线观看| 午夜亚洲精品| 午夜亚洲福利| 国产精品亚洲人在线观看| 亚洲第一精品夜夜躁人人躁| 国产精品影音先锋| 99精品久久| 久久不射电影网| 亚洲欧美在线视频观看| 欧美1区2区视频| 免费一级欧美在线大片| 国产亚洲精品aa午夜观看| 一本大道久久a久久精二百| 一区二区三区久久久| 欧美女激情福利| 亚洲免费电影在线观看| 亚洲午夜日本在线观看| 国产精品久久久久久久久久直播| 亚洲美女免费视频| 亚洲免费在线观看视频| 国产欧美一级| 欧美成人一区二区三区在线观看| 国产丝袜一区二区| 久久久久久噜噜噜久久久精品| 久久视频精品在线| 欲香欲色天天天综合和网| 久久久在线视频| 日韩一级裸体免费视频| 亚洲视频一起| 欧美极品一区二区三区| 亚洲综合色噜噜狠狠| 久久久精品国产免大香伊| 亚洲巨乳在线| 国自产拍偷拍福利精品免费一| 久久人91精品久久久久久不卡 | 激情综合色综合久久| 老司机精品视频网站| 亚洲视频精选在线| 亚洲激情黄色| 久久久水蜜桃| 午夜欧美精品| 亚洲图片自拍偷拍| av成人天堂| 亚洲精品一区二| 91久久中文字幕| 国产在线精品二区| 国产精品视频一区二区高潮| 欧美精品激情blacked18| 久久综合久久久久88| 久久国产色av| 91久久一区二区| 欧美有码在线视频| 欧美亚洲综合久久| 欧美一区=区| 欧美在线观看视频一区二区三区| 亚洲一区二区久久| 亚洲视频在线一区| 亚洲午夜在线观看| 性欧美激情精品| 国产酒店精品激情| 国产人成一区二区三区影院 | 亚洲品质自拍| 91久久国产综合久久91精品网站| 亚洲国产一区二区a毛片| 亚洲三级电影全部在线观看高清| 91久久久亚洲精品| 亚洲欧美制服中文字幕| 久久综合中文| 国产精品久久久久免费a∨ | 一区二区三区视频在线观看| 亚洲午夜久久久久久久久电影院 | 欧美福利视频网站| 久久久久一本一区二区青青蜜月| 欧美成人国产va精品日本一级| 欧美日韩麻豆| 亚洲美女在线视频| 欧美中文在线字幕| 99国产精品视频免费观看| 欧美一级淫片播放口| 国产精品久久久久影院色老大| 原创国产精品91| 欧美一区二区| 一二三区精品| 欧美伦理视频网站| 99精品福利视频| 亚洲电影免费在线| 免费永久网站黄欧美| 国产日韩av高清| 欧美亚洲免费高清在线观看| 亚洲免费观看| 欧美午夜久久久| 99亚洲伊人久久精品影院红桃| 免费观看一区| 欧美日在线观看| 亚洲综合成人在线| 欧美在线国产精品| 一区二区三区精密机械公司| 亚洲视频专区在线| 99伊人成综合| 亚洲视频精选| 激情综合网址| 亚洲精品欧美在线| 国产精品免费一区二区三区观看| 欧美亚洲免费在线| 玖玖玖国产精品| 亚洲视频一二区| 久久成年人视频| 在线亚洲免费| 久久九九全国免费精品观看| 91久久久久久| 亚洲欧美视频| 亚洲午夜成aⅴ人片| 久久精品一二三区| 午夜天堂精品久久久久| 欧美国产日本| 亚洲成人在线网| 国模精品娜娜一二三区| 亚洲精品护士| 亚洲成在人线av| 久久av老司机精品网站导航| 亚洲尤物视频网| 欧美日韩不卡| 亚洲国产精品久久人人爱蜜臀 | 亚洲国产欧美另类丝袜| 国产伦精品一区二区三区免费| 亚洲人成亚洲人成在线观看 | 午夜视频精品| 亚洲一区欧美二区| 欧美丝袜第一区| 亚洲制服av|