锘??xml version="1.0" encoding="utf-8" standalone="yes"?>一区二区久久久久,欧美色精品天天在线观看视频 ,亚洲精品一二区http://www.shnenglu.com/flagman/category/15574.html 鍞愪寒鐨勪釜浜烘妧鏈崥瀹? 銆愭榪庤漿杞斤紝浣嗚鏍囨槑鍘熶綔鑰呫?/description>zh-cnMon, 12 Dec 2011 16:19:44 GMTMon, 12 Dec 2011 16:19:44 GMT60C++ library series -- in the MFC multiple-thread environment, how to quit worker-thread safely which begins with AfxBeginThreadhttp://www.shnenglu.com/flagman/archive/2011/12/11/how_to_quit_worker-thread_safely_which_begins_with_AfxBeginThread.htmlflagmanflagmanSun, 11 Dec 2011 12:35:00 GMThttp://www.shnenglu.com/flagman/archive/2011/12/11/how_to_quit_worker-thread_safely_which_begins_with_AfxBeginThread.htmlhttp://www.shnenglu.com/flagman/comments/161934.htmlhttp://www.shnenglu.com/flagman/archive/2011/12/11/how_to_quit_worker-thread_safely_which_begins_with_AfxBeginThread.html#Feedback0http://www.shnenglu.com/flagman/comments/commentRss/161934.htmlhttp://www.shnenglu.com/flagman/services/trackbacks/161934.html
  In the MFC environment, normally, thread should be launched with AfxBeginThread for taking usage of MFC multiple-thread mechanism; In such mechanism, those datastructures, such as AFX_MODULE_STATE, would be used by MFC framework to maintain related thread information. It runs well when threads, launched with AfxBeginThread, quit before the main thread, which is responsible for initializing C run-time, but if such main thread quit before any other thread launched by AfxBeginThread, the current application would crash.
  Such crash comes from the _afxThreadData (CThreadSlotData* _afxThreadData, which is defined in AFXTLS.cpp as global data structure) has been destructed while the main thread quits and it will invoke related function to clean up global data structures, including _afxThreadData definitely.
  Consequently, serious developer should prepare for such case (other worker thread quits before main thread).
  
  The reasonable resolve for such issue, would ensure any other threads should quit before the main thread. 
  
.h file 
  /////////////////////////////////////////////////////////////////////////////
// CSafeEnterLeaveThread thread
class CSafeEnterLeaveThread : public CWinThread
{
DECLARE_DYNCREATE(CSafeEnterLeaveThread)
protected:
CSafeEnterLeaveThread();           // protected constructor used by dynamic creation
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSafeEnterLeaveThread)
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
//}}AFX_VIRTUAL
// Implementation
protected:
virtual ~CSafeEnterLeaveThread();
// Generated message map functions
//{{AFX_MSG(CSafeEnterLeaveThread)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
.cpp file 
/////////////////////////////////////////////////////////////////////////////
// CSafeEnterLeaveThread
IMPLEMENT_DYNCREATE(CSafeEnterLeaveThread, CWinThread)
CSafeEnterLeaveThread::CSafeEnterLeaveThread()
{
}
CSafeEnterLeaveThread::~CSafeEnterLeaveThread()
{
}
BOOL CSafeEnterLeaveThread::InitInstance()
{
// TODO:  perform and per-thread initialization here
ASSERT(this->m_hThread);
CMainApp::RegisterMFCThread(this->m_hThread);
return TRUE;
}
int CSafeEnterLeaveThread::ExitInstance()
{
// TODO:  perform any per-thread cleanup here
ASSERT(this->m_hThread);
CMainApp::UnRegisterMFCThread(this->m_hThread);
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CSafeEnterLeaveThread, CWinThread)
//{{AFX_MSG_MAP(CSafeEnterLeaveThread)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
And in the CMainApp,
set<HANDLE> g_ThreadHandleSet;
HANDLE g_ThreadHandleArray[MAXIMUM_WAIT_OBJECTS];
CCriticalSection g_csGlobalData;
void CAccgbApp::CheckAllOtherMFCThreadsLeave()
{
int count = g_ThreadHandleSet.size();
if (count == 0) return;
set<HANDLE>::iterator it;
int idx = 0;
for (it = g_ThreadHandleSet.begin(); it != g_ThreadHandleSet.end() && idx < MAXIMUM_WAIT_OBJECTS; it++, idx++)
{
g_ThreadHandleArray[idx] = *it;
}
if (count > idx) count = idx;
::WaitForMultipleObjects(count, g_ThreadHandleArray, TRUE, INFINITE);
}
void CAccgbApp::CleanupGlobalData()
{
g_csGlobalData.Lock();
g_ThreadHandleSet.empty();
g_csGlobalData.Unlock();
}
BOOL CAccgbApp::RegisterMFCThread(HANDLE hThread)
{
if (hThread == NULL) return FALSE;
g_csGlobalData.Lock();
if (g_ThreadHandleSet.find(hThread) == g_ThreadHandleSet.end()) 
g_ThreadHandleSet.insert(hThread);
g_csGlobalData.Unlock();
return TRUE;
}
void CAccgbApp::UnRegisterMFCThread(HANDLE hThread)
{
if (hThread == NULL) return;
g_csGlobalData.Lock();
if (g_ThreadHandleSet.find(hThread) != g_ThreadHandleSet.end())
g_ThreadHandleSet.erase(hThread);
g_csGlobalData.Unlock();
}


flagman 2011-12-11 20:35 鍙戣〃璇勮
]]>
鎿嶄綔緋葷粺鎬庝箞鏍規(guī)嵁涓涓狧WND鍙ユ焺錛屾壘鍒扮浉搴旂殑浠g爜http://www.shnenglu.com/flagman/archive/2011/04/04/Mapping_BetweenCppObjectAndHWND_InMFC.htmlflagmanflagmanMon, 04 Apr 2011 06:16:00 GMThttp://www.shnenglu.com/flagman/archive/2011/04/04/Mapping_BetweenCppObjectAndHWND_InMFC.htmlhttp://www.shnenglu.com/flagman/comments/143398.htmlhttp://www.shnenglu.com/flagman/archive/2011/04/04/Mapping_BetweenCppObjectAndHWND_InMFC.html#Feedback4http://www.shnenglu.com/flagman/comments/commentRss/143398.htmlhttp://www.shnenglu.com/flagman/services/trackbacks/143398.html銆?鍦?鏌?鐨勫ぇ浣滀腑鎻愬埌: 銆?/em>

: 姣斿鎴戞湁涓涓狢MyButton鐨勭被錛屾垜鐜板湪鏈変粬鐨勪竴涓猦andle
: 緙栬瘧鍣ㄦ庝箞鏍規(guī)嵁榪欎釜鍙ユ焺鎵懼埌CMyButton鐨勪唬鐮佺殑錛?/em>

銆?鍦?鏌愭煇 鐨勫ぇ浣滀腑鎻愬埌: 銆?br>: 榪欎釜鍜孫S/Compiler娌″叧緋伙紝鏄簱璧風(fēng)殑浣滅敤
: 浠ヤ粠鏌愪釜鏂囩珷閲岀湅鐨勶紝璇碝FC鐢ㄤ簡(jiǎn)涓涓ぇmap錛屾病楠岃瘉榪?br>: 鏈夋湰璁睪DI鐨勪功閲岋紝鐢ㄤ簡(jiǎn)WNDCLASS閲岀殑extra bytes鏉ュ疄鐜扮殑榪欎釜鏄犲皠

 


MFC鐨勫簲鐢ㄩ噷錛屾瘡涓狹FC綰跨▼錛堝繀欏昏浣跨敤MFC鏂瑰紡鍚姩鐨勭嚎紼嬶級(jí)閮界淮鎶ゆ湁涓涓狹FC object鍜孒WND涔嬮棿鐨?/p>

mapping錛屾暣涓狹FC妗嗘灦灝辨槸浣跨敤榪欎釜鏈哄埗鏉ュ疄鐜板簲鐢ㄧ駭C++瀵硅薄鍜岀郴緇熺駭鍘熺敓紿楀彛鍐呮牳瀵硅薄涔嬮棿鐨勫叧鑱旓紱

鍥犱負(fù)榪欎釜mapping鏄互綰跨▼涓哄崟浣嶆潵緇存姢鐨勶紝姣忎釜綰跨▼闂翠簰涓嶅叧鑱旓紝鎵浠ワ紝涓涓簲鐢ㄩ噷瀵逛簬娑夊強(qiáng)UI紿楀彛鐨?/p>

浠誨姟鏈濂芥槸閮芥斁鍦ㄥ悓涓涓嚎紼嬮噷闈紝涓鑸氨鏄綋鍓嶈繘紼嬬殑涓葷嚎紼嬶紝鍚﹀垯鍙兘鍑虹幇MFC object鍜孒WND涔嬮棿

鍏寵仈涓嶄笂鐨勯棶棰橈紝鑰屼笖榪欐牱鐨勯棶棰樿繕寰堥殣钄姐?br>

鑷充簬WNDCLASS緇撴瀯鑷甫鐨別xtra bytes鍩燂紝鏄互鍓嶇己涔忓簲鐢ㄦ鏋剁殑鏃朵唬錛屼嬌鐢╓in32 API鐩存帴寮鍙戞椂錛岃姣忎釜

紿楀彛綾伙紙榪欓噷鐨勭被錛屼笉鏄疌++ class鐨勬蹇碉紝鑰屾槸Windows緋葷粺紿楀彛瀹氫箟鏃剁殑涓縐嶆暟鎹粨鏋勶級(jí)閮借兘鏈変釜闄?/p>

甯︿竴浜涢澶栫殑鑷畾涔夋暟鎹殑絀洪棿錛岃繖涓┖闂村線寰琚敤鏉ュ瓨鏀句笌褰撳墠紿楀彛綾葷浉鍏崇殑鐢ㄦ埛鏁版嵁錛岄氬父鏄寚鍚?/p>

鏌愪釜鍐呭瓨鍖哄煙鐨勬寚閽堬紝褰撶▼搴忔搷浣滆繖涓睘浜庤繖涓獥鍙g被鐨勭獥鍙f椂灝卞彲浠ユ牴鎹繖涓檮甯︾殑鑷畾涔夋暟鎹紙鎴?/p>

鑰呮寚閽堬級(jí)鏉ユ搷浣滃搴旂殑鍏寵仈鑷畾涔夋暟鎹紱寰堝鍚庢潵鍑虹幇鐨勬鏋訛紝涔熼兘浣跨敤浜?jiǎn)杩欎釜extra bytes鍩燂紝鏉ュ瓨鏀?/p>

妗嗘灦鏈韓鐨勪竴浜涘拰紿楀彛綾葷浉鍏寵仈鐨勬暟鎹粨鏋勩備粠鐩墠瓚嬪娍鐪嬶紝鐩存帴浣跨敤WNDCLASS浠ュ強(qiáng)extra bytes鐨勫彲鑳?/p>

鎬ф槸寰箮鍏跺井浜?jiǎn)锛屼絾鏄鏋滆鍋氬ソ鍘熺敓搴旂敤鐨勫紑鍙戯紝寰堝搴曞眰鐨勫疄鐜扮粏鑺傛渶瑕佽繕鏄鐭ラ亾涓涓嬶紝浠ヤ究浜?/p>

浼樺寲緇撴瀯鍜屾ц兘錛屼互鍙?qiáng)鍑洪敊鏃剁殑璋冭瘯澶勭悊锛涘洜湄?fù)鏃犺鏄疻inform/WPF錛岃繕鏄法騫沖彴鐨刉TL/QT/WxWindows絳?/p>

絳夋柊鍨嬬殑鏈哄埗鎴栬呮鏋躲佺被搴擄紝鍙鏄湪Windows騫沖彴涓婃惌寤虹殑錛岄偅閮芥槸鍩轟簬鍓嶉潰璇磋繃鐨勮繖濂楁渶鍩烘湰涔熸槸

鏈鏍稿績(jī)鐨刉in32 API鍩虹涔嬩笂銆?/p>

 



flagman 2011-04-04 14:16 鍙戣〃璇勮
]]>
C++ library緋誨垪 -- static destructors in multiple threadshttp://www.shnenglu.com/flagman/archive/2011/02/08/static_destructors_in_multiple_threads.htmlflagmanflagmanTue, 08 Feb 2011 12:57:00 GMThttp://www.shnenglu.com/flagman/archive/2011/02/08/static_destructors_in_multiple_threads.htmlhttp://www.shnenglu.com/flagman/comments/139812.htmlhttp://www.shnenglu.com/flagman/archive/2011/02/08/static_destructors_in_multiple_threads.html#Feedback0http://www.shnenglu.com/flagman/comments/commentRss/139812.htmlhttp://www.shnenglu.com/flagman/services/trackbacks/139812.html  In VC++ 8.0, while  code compiled with /clr or /clr:pure, static destructors sometimes would not being properly called before process exites in multiple threads.

  CRT incorrectly set a lock at _global_unlock which resulted in such issue.

  In CLR-mixed mode, during the inialization of static local object, CRT would call _atexit_m(_CPVFV func) in msilexit.cpp to register a special __clrcall callback function which would be called back to destroy such static object when the current AppDomain quited.

  In the multithread environment, _atexit_helper which was invoked by _atexit_m, could register such callbace function successfully because it had been guarded by __global_lock() and __global_unlock(). But in the same environment, the _atexit_m would fail to assign the correct value to __onexitbegin_m and __onexitend_m.

  __onexitbegin_m and __onexitend_m were shared by the different threads; It's the key point of such issue. For example, the following statements,

  __onexitbegin_m = (_CPVFV *)_encode_pointer(onexitbegin_m);
  __onexitend_m = (_CPVFV *)_encode_pointer(onexitend_m);

should also guarded by __global_lock() and __global_unlock() or other syn primitives.


__global_lock();
__onexitbegin_m = (_CPVFV *)_encode_pointer(onexitbegin_m);
__onexitend_m   = (_CPVFV *)_encode_pointer(onexitend_m);
__global_unlock();


extern "C" int __clrcall _atexit_m(_CPVFV func)
{
 MANAGED_ASSERT(AppDomain::CurrentDomain->IsDefaultAppDomain(), "This fuction must be called in the default domain");

 __global_lock();
 _CPVFV* onexitbegin_m = (_CPVFV*)_decode_pointer(__onexitbegin_m);
 _CPVFV* onexitend_m = (_CPVFV*)_decode_pointer(__onexitend_m);
 __global_unlock();

 int retval = _atexit_helper((_CPVFV)_encode_pointer(func), &__exit_list_size, &onexitend_m, &onexitbegin_m);

 __global_lock();
 __onexitbegin_m = (_CPVFV*)_encode_pointer(onexitbegin_m);
 __onexitend_m  = (_CPVFV*)_encode_pointer(onexitend_m);
 __global_unlock();

 return retval;
}



flagman 2011-02-08 20:57 鍙戣〃璇勮
]]>
C++ library緋誨垪 -- STL瀹炵幇涓殑ODR 鈥渙ne-definition-rule鈥?for typeshttp://www.shnenglu.com/flagman/archive/2010/12/19/136923.htmlflagmanflagmanSun, 19 Dec 2010 03:09:00 GMThttp://www.shnenglu.com/flagman/archive/2010/12/19/136923.htmlhttp://www.shnenglu.com/flagman/comments/136923.htmlhttp://www.shnenglu.com/flagman/archive/2010/12/19/136923.html#Feedback0http://www.shnenglu.com/flagman/comments/commentRss/136923.htmlhttp://www.shnenglu.com/flagman/services/trackbacks/136923.htmlLinking issue
- While different modules (.obj) using istreambuf_iterator/ostreambuf_iterator, compiled with different options on HID/no-HID and SCL/no-SCL, these modules could not be linked successfully;

The error comes directly from the CLR when a type has multiple definitions that are not consistent based upon the ODR, one-definition-rule for types. And, the linker itself isn't involved.

For example, with one module compile with /D_SECURE_SCL=0, while another is compiled with _SECURE_SCL=1;

At first, it's found that with _SECURE_SCL, the only thing that could be different as following,

#if _SECURE_SCL
    typedef _Range_checked_iterator_tag _Checked_iterator_category;
#endif

But, actually, it's not the typedef that changed the layout the these iterators (istreambuf_iterator/ostreambuf_iterator), and further they don't really use the extra pointer that _SECURE_SCL adds.

Finally, it's found the root cause is that, these iterators, istreambuf_iterator/ostreambuf_iterator  had been moved from <xutility> to <streambuf>, and their ultimate base class had been changed from _Iterator_base_secure to _Iterator_base. And, the layout of _Iterator_base would be different between HID and no-HID, and between SCL and no-SCL. It is the cause where the issue comes from.

What we can learn from such issue,
These iterators really shouldn't derive from either _Iterator_base_secure or _Iterator_base, because these classes contain data members (pointers) which are entirely unused. It would result in unnecessary bloat and extra work being performed in ctor/dtor etc.

Introduce a new class, _Iterator_base_universal, which is defined identically regardless of HID/no-HID and SCL/no-SCL. It would contains the three internal typedefs that all standard iterators need to have, and nothing else. And _Iterator_base (in all of its variants) and _Iterator_base_secure now should derive from _Iterator_base_universal to get these typedefs.

Now, when an iterator wants these typedefs, but not the data members of _Iterator_base and _Iterator_base_secure, it could derive from _Iterator_base_universal. And istreambuf_iterator and ostreambuf_iterator are now as small as possible, and keep identical representations or layout across HID/no-HID, SCL/no-SCL.



flagman 2010-12-19 11:09 鍙戣〃璇勮
]]>
鍏充簬COM鍜?net鐨勬濊?/title><link>http://www.shnenglu.com/flagman/archive/2010/12/19/AboutComAndDotNet.html</link><dc:creator>flagman</dc:creator><author>flagman</author><pubDate>Sun, 19 Dec 2010 03:04:00 GMT</pubDate><guid>http://www.shnenglu.com/flagman/archive/2010/12/19/AboutComAndDotNet.html</guid><wfw:comment>http://www.shnenglu.com/flagman/comments/136922.html</wfw:comment><comments>http://www.shnenglu.com/flagman/archive/2010/12/19/AboutComAndDotNet.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.shnenglu.com/flagman/comments/commentRss/136922.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flagman/services/trackbacks/136922.html</trackback:ping><description><![CDATA[<p><em>銆?鏌愭煇鎻愬埌: 銆?br>: 涓鑸COM澶嶆潅錛岄鍏堟槸鍚嶈瘝澶錛屽叾嬈℃槸鍩轟簬ATL鐨勫疄鐜版瘮杈冮毦鎳?br>: 榪欏茍涓嶆槸COM鏈韓澶嶆潅錛岃屾槸C++宸茬粡钀藉悗浜庢椂浠d簡(jiǎn)銆傛墍浠TL鐪嬭搗鏉ユ墠浼?xì)鍍忓ぉ涔︿竴鑸?/em></p> <p><br>铏界劧瀵逛簬鍏ㄦ柊鐨勫伐紼嬮」鐩紝鎺ㄨ崘閫氳繃.net瀹炵幇錛屼絾鏄紝鍙浣犲伐浣滃湪Windows騫沖彴涓婏紝蹇呯劧浼?xì)閬囧埌鍜孋OM鐩稿叧鐨勬妧鏈拰鏈哄埗錛屾棤璁烘槸澶ч噺鐨刲egacy鐨勫伐紼嬪拰浠g爜錛岃繕鏄綔涓篛S閲嶈鍔熻兘浠ュ強(qiáng)native緇勪歡鐨勯閫変氦浜掑艦寮忓拰鎺ュ彛鏆撮湶鏂瑰紡錛屾瘮濡侱irectX API錛屾瘮濡備竴浜沇MI鐨凙PI錛涙渶鏈夎叮鐨勬槸錛屽嵆浣挎槸.net鐨勬牳蹇?jī)CLR鏈韓涔熸槸涓涓狢OM緇勪歡錛屽彲浠ラ氳繃Host鐩稿叧鎺ュ彛璁﹏ative搴旂敤鏉ュ姞杞斤紝浠ュ湪褰撳墠榪涚▼涓惎鍔ㄦ暣涓狢LR鐨勮櫄鎷熸墽琛岀幆澧冩垨鑰呭彨鎵樼鎵ц鐜(managed executive environment)銆?/p> <p>鎶婃彙COM鏈変袱鐐瑰緢鍏抽敭錛?br>1錛塈nterface-based design錛屼粠璁捐鍜岀紪鐮佹濊礬涓婂氨鏄瀹屽叏鍩轟簬鎺ュ彛錛?br>2錛塚irtualTable-based binary compatibility, 瀹炵幇涓婃棤璁轟綍縐嶈璦鎴栬呮満鍒訛紝鍙絎﹀悎鍩轟簬铏氳〃鐨勪簩榪涘埗鍏煎瑙勮寖錛屽氨閮藉彲浠ュ疄鏂斤紱</p> <p>COM浠呬粎鏄釜瑙勮寖錛屽熀浜嶤OM鐨勫叿浣撴妧鏈潪甯鎬箣澶氾紝OLE錛孉utomation錛孲tructural storage錛孉ctiveX...姹楃墰鍏呮爧錛岃繕鏈塁OM+錛岃繖涓槸鎻愪緵浼佷笟綰у紑鍙戝繀澶囩殑涓浜涘熀紜鍔熻兘鍜岃鏂斤紝姣斿錛屼簨鍔$鐞嗘満鍒訛紝瀵硅薄姹狅紝瀹夊叏綆$悊錛屾秷鎭槦鍒?..闇瑕佹寚鍑猴紝鐩墠鍗充究鏄?net Framework涔熸病鏈夊疄鐜癈OM+鎵鎻愪緵榪欎簺鏈哄埗錛屽彧鏄畝鍗曠殑灝佽浜?jiǎn)鍚庤呫?/p> <p>COM鎶鏈腑鍙兘鏈変竴浜涙瘮杈冨洶闅劇殑鍦版柟錛屾帴鍙g殑涓鑷存э紝瀵硅薄鐨勮仛鍚堝拰鐢熷懡鍛ㄦ湡錛屽闂達(dá)紝璺ㄥ闂寸殑鎺ュ彛璁塊棶錛屽悕瀛楀璞★紝絳夌瓑錛涜繖浜涘茍涓嶆槸COM瑙勮寖浜轟負(fù)鍒墮犵殑鍥伴毦錛岃屾槸涓轟簡(jiǎn)璁捐鍜屾彁渚涳紝鍙互璺ㄨ繘紼嬪拰鏈哄櫒杈圭晫錛岃法寮傛瀯騫沖彴錛堝綋鐒跺繀欏誨疄鐜頒簡(jiǎn)COM鎵瑙勫畾鐨勫熀紜鏈嶅姟錛夛紝閫忔槑鍖栧叿浣撳璞$被鍨嬪強(qiáng)瀵硅薄鐢熷懡鍛ㄦ湡錛屼究浜庣粺涓閮ㄧ講鍜岀増鏈鐞嗙殑緇勪歡鎶鏈紝鎵蹇呴』浠樺嚭鐨勪唬浠鳳紝榪欎釜浠d環(huán)浠庡紑鍙戜漢鍛樿搴︾湅鍏蜂綋琛ㄧ幇涓猴紝姒傚康鐞嗚В鐨勫洶闅句互鍙?qiáng)鍏蜂綋浜寴q涘埗瀹炵幇鐨勫洶闅撅紱</p> <p>涓嶈繃浠庡彟涓涓搴︾湅錛孋OM宸茬粡寰堝鏄撲簡(jiǎn)錛?br>a) COM瑙勮寖宸叉妸瑕佽揪鑷磋繖浜涚洰鏍囩殑緋葷粺錛屾墍蹇呴』鎻愪緵鐨勬帴鍙e拰鐗規(guī)ф娊璞′簡(jiǎn)鍑烘潵錛屽彧涓嶈繃涓轟簡(jiǎn)琛ㄨ揪榪欎簺鎶借薄鐨勬蹇佃屾柊閫犵殑鏈鍚嶈瘝鏈変簺闄岀敓鍜岀獊鍏錛涘鏋滆閬囧埌鐩鎬技闂鐨勬瘡涓涓璁″拰寮鍙戜漢鍛橀兘鑷繁鏉ュ仛鎶借薄錛屾湭蹇呬細(xì)鐢熸垚鏇村ソ鐨勬柟妗堬紱</p> <p>b) 涓轟簡(jiǎn)甯姪璁捐鍜屽紑鍙戜漢鍛橈紝浜轟滑鎻愪緵浜?jiǎn)寰堝鐨勫紑鍙戝簱錛屼互鎻愰珮COM寮鍙戠殑姝g‘鎬у拰鏁堢巼錛涙渶鏄捐憲鐨勫氨鏄疢FC涓叧浜嶤OM/OLE鐨勮緟鍔╃被鍜屽嚱鏁幫紝浠ュ強(qiáng)涓轟簡(jiǎn)COM鑰岀敓鐨凙TL錛涗粠鏈川涓婄湅錛岃繖浜涚被搴撻兘鏄妸COM瑙勮寖涓繀欏誨疄鐜扮殑錛學(xué)indows騫沖彴鏈韓娌℃湁鎻愪緵錛屽叿浣撹璁″拰寮鍙戜漢鍛樺疄闄呭疄鏂芥椂浼?xì)閲嶅瀹炵幇鐨勫Q屽悓鏃跺張闈炲父瀹規(guī)槗鍑洪敊鐨勯偅閮ㄥ垎鍔熻兘錛岄泦涓埌浜?jiǎn)杩欎簺绫诲簱閲尵l熶竴瀹炵幇錛岃鍏蜂綋璁捐鍜屽紑鍙戜漢鍛樹互浠g爜閲嶇敤鐨勫艦寮忔潵瀹炵幇COM瑙勮寖錛?/p> <p>褰撶劧浜轟滑涔熸剰璇嗗埌浜?jiǎn)COM榪欐牱鐨勪竴浜涢棶棰橈紝鐗瑰埆鏄叿浣撳疄鐜版椂璁捐鍜屽紑鍙戜漢鍛樺繀欏昏鍏蟲敞鍑犱箮鎵鏈夌殑浜岃繘鍒剁粏鑺傦紝浜庢槸.net灝辮癁鐢熶簡(jiǎn)錛屾妸榪欎簺瑙勮寖鐨勮澶氬鏉傛ч兘灝佽鍦ㄤ簡(jiǎn)铏氭嫙鏈洪噷闈紝鎶婅繖浜涚洰鏍囧姛鑳斤紙璺ㄨ竟鐣屻侀忔槑鎬х瓑絳夛級(jí)閫氳繃涓鑷磋屽張騫蟲粦鐨勫鉤鍙版帴鍙e拰鑷弿榪扮殑meta data錛屼互涓縐嶈璁捐鍜屽紑鍙戜漢鍛樻洿鏄撴帴鍙楃殑椋庢牸寮鏀句簡(jiǎn)鍑烘潵錛?/p> <p>COM鐨勫獎(jiǎng)鍝嶆槸闈炲父騫垮ぇ鐨勶紝姣斿XPCOM 錛孎irefox涓婄殑涓縐嶆彃浠舵妧鏈爣鍑嗭紝灝辨槸鏍規(guī)嵁COM鐨勬濇兂鍜屽師鍒欏埗瀹氱殑錛涜澶氳瘎璁鴻錛孎irefox鐨勬垚鍔熸槸鍥犱負(fù)瀹冩彃浠舵槸濡傛鐨勬垚鍔燂紝榪欎篃綆楁槸COM鏈韓鎵鎰忔枡涓嶅埌鐨勮礎(chǔ)鐚箣涓銆?/p> <p>鍦?net鐨勫鉤鍙頒笂錛屽嵆浣挎槸.net CLR/SSCLI鐨勫叿浣撳疄鐜頒篃澶ч噺榪愮敤浜?jiǎn)COM鐨勬濇兂鍜屾満鍒訛紝鍙互璇?net灝辨槸鎼緩鍦–OM浜岃繘鍒剁粍浠跺鉤鍙頒箣涓婄殑铏氭嫙鏈烘墭綆″鉤鍙般?/p> <p>鏈鍚庯紝.net寮濮嬫椂鐨勫唴閮ㄧ紪鍙鋒槸COM 2.0</p> <p> </p> <p>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</p> <p>*) 鍏充簬“鍚嶈瘝澶”<br>榪欐槸瑕佸疄鐜板彲浠ヨ法榪涚▼鍜屾満鍣ㄨ竟鐣岋紝璺ㄥ紓鏋勫鉤鍙幫紙褰撶劧蹇呴』瀹炵幇浜?jiǎn)COM鎵瑙勫畾鐨勫熀紜鏈嶅姟錛夛紝閫忔槑鍖栧叿浣撳璞$被鍨嬪強(qiáng)瀵硅薄鐢熷懡鍛ㄦ湡錛屼究浜庣粺涓閮ㄧ講鍜岀増鏈鐞嗙殑緇勪歡鎶鏈紝鎵蹇呴』浠樺嚭鐨勪唬浠楓?/p> <p>COM瑙勮寖宸叉妸瑕佽揪鑷磋繖浜涚洰鏍囩殑緋葷粺錛屾墍蹇呴』鎻愪緵鐨勬帴鍙e拰鐗規(guī)ф娊璞′簡(jiǎn)鍑烘潵錛屽彧涓嶈繃涓轟簡(jiǎn)琛ㄨ揪榪欎簺鎶借薄鐨勬蹇佃屾柊閫犵殑鏈鍚嶈瘝鏈変簺闄岀敓鍜岀獊鍏錛涘鏋滆閬囧埌鐩鎬技闂鐨勬瘡涓涓璁″拰寮鍙戜漢鍛橀兘鑷繁鏉ュ仛鎶借薄錛屾湭蹇呬細(xì)鐢熸垚鏇村ソ鐨勬柟妗堬紱</p> <p>涓句釜渚嬪瓙錛宎partment錛屽闂達(dá)紝灝辨槸涓轟簡(jiǎn)鎶借薄浼犵粺OS涓繘紼嬪拰綰跨▼鐨勫疄鐜拌屾柊閫犵殑鏈鍚嶈瘝鍜屾蹇碉紱浠諱綍浜鴻鎶借薄榪欐牱鐨勪竴浜涙蹇碉紝涓嶆柊閫犳湳璇紝鏄潪甯稿洶闅劇殑錛屽姣?net錛屽悗鑰呯敤浜?jiǎn)CLR铏氭嫙鏈烘潵灝佽浜?jiǎn)澶у鏁扮殑瀹炵幇缁嗚妭锛岒q剁敤璁╀漢鏇村鏄撴帴鍙楃殑椋庢牸鏉ュ紑鏀炬帴鍙o紝鍙簨瀹炰笂浠嶇劧鏂伴犱簡(jiǎn)涓浜涘悕璇嶅拰姒傚康錛屽綾諱技鑼冪暣鐨凙ppDomain錛?/p> <p>*) 鍏充簬“鍩轟簬ATL鐨勫疄鐜版瘮杈冮毦鎳?#8221;<br>ATL涓昏浣跨敤浜?jiǎn)template鎶鏈紝COM鎺ュ彛鏅鴻兘鎸囬拡錛岀敤闈?rùn)鎬佽漿鎹㈡潵妯℃嫙鍔ㄦ佺粦瀹氾紝絳夌瓑錛屽疄闄呭茍涓嶆槸寰堝鏉傦紝鍙兘綆梒++瀹炵幇鏈哄埗鐨勪腑絳夐毦搴︼紝涓昏娑夊強(qiáng)Modern C++ design涓涔︿腑涓浜涚浉鍏寵璁$悊蹇電殑榪愮敤銆傚姣擝oost涓煇浜涘簱鐨勫疄鐜幫紝ATL寰堜漢閬撲簡(jiǎn)銆?/p> <p>*) 鍏充簬“榪欏茍涓嶆槸COM鏈韓澶嶆潅錛岃屾槸C++宸茬粡钀藉悗浜庢椂浠d簡(jiǎn)”<br>棣栧厛COM鐨勮鑼冪殑紜槸澶嶆潅鐨勶紝涓哄暐錛熺涓鐐瑰凡緇忚浜?jiǎn)锛尀鏄皋Z簡(jiǎn)瑕佹娊璞″嚭璺ㄨ竟鐣屽拰瀵硅薄閫忔槑鐨勭粍浠舵妧鏈紱.net琛ㄨ薄涓婄湅姣旇緝“綆鍗曞鏄?#8221;錛岄鏍間翰榪戣璁″拰寮鍙戜漢鍛橈紝瀹為檯涓婂鏉備簨鍔″拰瀹炵幇緇嗚妭閮借鍒掑垎鍒癈LR閭d釜灞傞潰涓婂幓瀹炵幇浜?jiǎn)锛涘幦潨嬩竴涓婥LR鐨勫紑婧愬疄鐜癝SCLI錛屼綘浼?xì)鍙戠帋图屾暣涓櫄鎷熸満邈^鍙扮殑瀹炵幇錛屽ぇ閲忚繍鐢ㄤ簡(jiǎn)COM鐨勬濇兂鍜屾満鍒訛紝灝辨槸涓涓法鍨嬬郴緇熷鉤鍙扮駭鐨凜OM server錛?/p> <p>鍏舵錛孋OM瑙勮寖鏈韓鏄嫭绔嬩簬瀹炵幇璇█鐨勶紝鍙鏋勫緩鍑虹殑緇勪歡絎﹀悎瑙勮寖鍒跺畾鐨勪簩榪涘埗鍏煎錛岀郴緇熷氨鍙互榪愪綔錛岃繖鍜孋++鏄惁钀藉悗鏃朵唬娌℃湁鍏崇郴銆傚鏋滃紑鍙戜漢鍛樿涓猴紝.net鎵嶅鍏堣繘錛屼篃瀹屽叏鍙互鐢?net涓殑鎵樼璇█錛屽C#鏉ュ疄鐜癈OM緇勪歡錛?/p> <p>鏈鍚庯紝姣忕璇█閮芥湁鍏墮傜敤鐨勮寖鍥達(dá)紝鐜板湪鍙互榪欎箞璇?#8220;濡傛灉鏈変竴涓叏鏂扮殑欏圭洰闇姹傦紝瑕佽揪鑷磋法杈圭晫鍜屽璞¢忔槑緇勪歡錛屽茍涓旀病鏈夊お榪囦弗鑻涚殑鎬ц兘闇姹傦紝閭d箞.net騫沖彴鍙?qiáng)鍏朵笂鐨勬墭绠¤瑷鏉ュ疄鐜幫紝姣旂敤C++鍙?qiáng)鐩稿厡櫨呭姪绫诲簱鏉ヤ互COM緇勪歡褰㈠紡鏉ュ疄鐜幫紝瑕佹洿鍚堥傦紝涔熸洿蹇熶究鎹峰拰鑺傜渷棰勭畻銆?#8221;浣嗘槸錛屽湪榪欎釜鍒ゆ柇涓婃垜浠姞浜?jiǎn)寰堝涓ユ牸鐨劸U︽潫錛屼竴鏃﹂渶姹傚彉鏇達(dá)紝鐗瑰埆鏄」鐩殑闈炲姛鑳芥ч渶姹傦紝瑕佹眰楂樻ц兘榪愮畻鎴栬呮洿欏虹晠鐨勪笌legacy鐨刵ative緋葷粺鐩鎬簰錛岄偅涔?#8220;浣跨敤native璇█鏉ュ疄鐜版ц兘鍏抽敭浠ュ強(qiáng)legacy浜や簰鍔熻兘錛岄氳繃COM灝佽錛屽啀鐢盋OMInterop浜?net鎵樼搴旂敤璋冪敤”鍙兘鏄洿鐜板疄鐨勬柟妗堛侰++鏄竴闂ㄦ椿鐨勮璦錛屼笉鏂彂灞曠殑璇█錛屽嵆浣垮湪鏈鏂扮殑鎵樼鏃朵唬閲岋紝C#鎴愪負(fù)鏍囧噯涓繪祦錛屼絾C++/CLI浠嶇劧鏄墭綆¤璦閲屽姛鑳芥渶瀹屾暣鐨勮璦銆?/p> <p> </p> <img src ="http://www.shnenglu.com/flagman/aggbug/136922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flagman/" target="_blank">flagman</a> 2010-12-19 11:04 <a href="http://www.shnenglu.com/flagman/archive/2010/12/19/AboutComAndDotNet.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>CLR緋誨垪--鎺㈢儲(chǔ)SSCLI銆?銆?/title><link>http://www.shnenglu.com/flagman/archive/2010/12/13/136255.html</link><dc:creator>flagman</dc:creator><author>flagman</author><pubDate>Mon, 13 Dec 2010 01:02:00 GMT</pubDate><guid>http://www.shnenglu.com/flagman/archive/2010/12/13/136255.html</guid><wfw:comment>http://www.shnenglu.com/flagman/comments/136255.html</wfw:comment><comments>http://www.shnenglu.com/flagman/archive/2010/12/13/136255.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flagman/comments/commentRss/136255.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flagman/services/trackbacks/136255.html</trackback:ping><description><![CDATA[<p>Fusion is one of the most importants features among ones in the runtime implementation of CLI.</p> <p>In the fusion, or any other components or modules, how to retrieve the execution engine instance and how to generate such engine?</p> <p>UtilExecutionEngine, implemented as COM object, support Queryinterface/AddRef/Release, and exposed via interface IExecutionEngine.</p> <p>With SELF_NO_HOST defined, <br>BYTE g_ExecutionEngineInstance[sizeof(UtilExecutionEngine)];<br>g_ExecutionEngineInstance would be the singleton instance of current execution engine,</p> <p>otherwise, without SELF_NO_HOST, the 'sscoree' dll would be loaded and try to get the exported function, which is named 'IEE' from such dll. Here, it is the well-known shim, in .net CLR, such module is named 'mscoree'. Further, if 'IEE' could not be found in such dll, system would try to locate another exported function, named 'LoadLibraryShim', and use such function to load the 'mscorwks' module, and try to locate the 'IEE' exportd functionin it.</p> <p>It's very obvious that Rotor has implemented its own execution engine, but it also gives or make space for implementation of execution engine from 3rd party. Here, .net CLR is a good candidate definitely, Rotor might load the mscorwks.dll module for its usage.</p> <p>PAL, PALAPI, for example, HeapAlloc, one famous WIN32 API, has been implemented as one PALAPI (defined in Heap.c), to make it possible that the CLI/Rotor be ported smoothly to other OS, such freebsd/mac os.</p> <p>CRT routines are also reimplemented, such as memcpy, it has been implemented as GCSafeMemCpy</p> <p>There're many macros in fuctions, such as SCAN_IGNORE_FAULT/STATIC_CONTRACT_NOTHROW/STATIC_CONTRACT_NOTRIGGER, they are for static analysis tool to scan, analyse and figour out the potential issues in code.</p> <p>From view point of the execution model by CLI, the act of compiling (including JIT) high-level type descriptions would be separated from the act of turning these type descriptions into processor-specific code and memory structures.</p> <p>And such executino model, in other word, the well-known 'managed execution', would defer the loading, verification and compilation of components until runtime really needs; At the same time, the type-loading is the key trigger that causes CLI's tool chain to be engaged at runtime. Deferred compilation(lead to JIT)/linking/loading would get better portability to different target platform and be ready for version change; The whole deferred process would driven by well-defined metadata and policy, and it would be very robust for building a virtual execution environment;</p> <p>At the top of such CLI tool chain, fusion is reponsible for not only finding and binding related assemblies, which are via assembly reference defined in assembly, fusion also takes another important role, loader, and its part of functionality is implemented in PEAssembly, ClassLoader classes. For example, ClassLoader::LoadTypeHandleForTypeKey.</p> <p>For types in virtual execution environment of CLI, rotor defines four kinds of elements for internal conducting, <br>ELEMENT_TYPE_CLASS for ordinary classes and generic instantiations(including value types);<br>ELEMENT_TYPE_ARRAY AND ELEMENT_TYPE_SZARRAY for array types<br>ELEMENT_TYPE_PRT and ELEMENT_TYPE_BYREF for pointer types<br>ELEMENT_TYPE_FNPTR for function pointer types</p> <p>every type would be assigned unique ulong-typed token, and such token would be used to look up in m_TypeDefToMethodTableMap (Linear mapping from TypeDef token to MethodTable *)which is maintained by current module; If there it is, the pointer to method table of such type would be retrieved, or it would look up in the loader module, where the method table should exist in while it's JIT loaded, not launched from NGEN image;</p> <p>And all the unresolved typed would be maintained in a hash table, PendingTypeLoadTable; Types and only those types that are needed, such as dependencies, including parent types, are loaded in runtime, such type is fully loaded and ready for further execution, and other unresolved types would be kept in the previous hash table.</p> <img src ="http://www.shnenglu.com/flagman/aggbug/136255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flagman/" target="_blank">flagman</a> 2010-12-13 09:02 <a href="http://www.shnenglu.com/flagman/archive/2010/12/13/136255.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>涓轟綍C++涓殑綾繪垚鍛樺嚱鏁版病鏈夐噰鐢ㄧ被浼糐ava涓殑鈥滃叏铏氣濊璁?/title><link>http://www.shnenglu.com/flagman/archive/2010/12/13/WhyNotCPPadoptAllVirtualFuction.html</link><dc:creator>flagman</dc:creator><author>flagman</author><pubDate>Mon, 13 Dec 2010 00:57:00 GMT</pubDate><guid>http://www.shnenglu.com/flagman/archive/2010/12/13/WhyNotCPPadoptAllVirtualFuction.html</guid><wfw:comment>http://www.shnenglu.com/flagman/comments/136254.html</wfw:comment><comments>http://www.shnenglu.com/flagman/archive/2010/12/13/WhyNotCPPadoptAllVirtualFuction.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/flagman/comments/commentRss/136254.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flagman/services/trackbacks/136254.html</trackback:ping><description><![CDATA[<p>鍏充簬紼嬪簭璁捐璇█鏈韓鐨勮璁℃湁璁稿鏈夎叮鐨勮瘽棰橈紝姣斿錛屼負(fù)浣旵++涓殑綾繪垚鍛樺嚱鏁版病鏈夐噰鐢ㄧ被浼糐ava涓殑“鍏ㄨ櫄”璁捐錛?br><br>1) 浠庤璦鏈韓璁捐涓婄湅錛?br>鏁堢巼瀹氱劧鏄痗++褰撳垵璁捐鏃惰冭檻鐨勯噸鐐逛箣涓錛屼婦涓緥瀛愶紝涓轟簡(jiǎn)鑺傜渷涓嶅繀瑕佺殑VTable寮閿錛孉TL鐢╰emplate鎶鏈潤(rùn)鎬佽漿鎹㈡潵妯℃嫙鍔ㄦ佺粦瀹氫互鏀寔COM鐗規(guī)х殑瀹炵幇錛涘拰C鐨勫吋瀹癸紝灝盫Table瑙掑害鐪嬶紝闂涓嶅ぇ錛屽洜涓哄悗鑰呭彲浠ョ敤鍑芥暟鎸囬拡鏁扮粍鏉ユā鎷燂紱</p> <p>2) 鍐嶄粠澶у鏁板簲鐢ㄤ腑甯歌鐨勭被緇ф壙浣撶郴涓婄湅錛?br>闄や簡(jiǎn)鏁翠釜緇ф壙浣撶郴鎵緇熶竴寮鏀懼嚭鏉ョ殑鎺ュ彛闆嗭紙涔熷氨鏄敱铏氬嚱鏁版墍緇勬垚錛夛紝鍦ㄧ戶鎵夸綋緋葷殑姣忎釜灞傞潰鍙﹀浼?xì)鏈夊ぇ閲忕殑鍏朵粬杈呭姪鎴愬憳鍑芥晭图堝叾鏁伴噺閫氬父姣旇櫄鍑芥暟澶氱殑澶氾級(jí)錛岃繖浜涙垚鍛樺嚱鏁板畬鍏ㄦ病蹇呰璁捐鎴愯櫄鍑芥暟錛?/p> <p>3) 浠庡叾浠栬璦鐪嬶紝<br>鍗充嬌杈冩柊鐨勮櫄鎷熸満璇█C#(Java綆楁槸杈冭佺殑铏氭嫙鏈鴻璦),鍙嶈屽畾涔変簡(jiǎn)姣擟++鏇翠負(fù)涓ユ牸鏇翠負(fù)鏄懼紡鐨勬垚鍛樻柟娉曞疄鐜版垨瑕嗙洊鎴栭噸杞芥垨鏂板緩鐨勮鍒欙紱榪欐槸闈炲父閲嶈鐨勫C++浠ュ強(qiáng)Java璁捐鎬濇兂鐨勫弽鎬濄?/p> <p>4) 浠庤璦鐨勯傜敤鍦哄悎鐪嬶紝<br>鎴戜滑鐜板湪鐨勮璁猴紝緇濆ぇ澶氭暟鎯呭喌涓嬪甫鏈変竴涓潪甯擱噸瑕佺殑榛樿鍓嶆彁錛岄偅灝辨槸鍦ㄧ敤鎴鋒佹ā寮忎笅浣跨敤C++錛屽鏋滄斁瀹借繖涓害鏉燂紝鍦ㄥ唴鏍告ā寮忎笅浣跨敤C++錛岄偅鎯呭喌鍙堝畬鍏ㄤ笉鍚屼簡(jiǎn)銆?br>寮曠敤涓嬮潰榪欎釜鏂囨。鐨勮鐐癸紝<a >http://www.microsoft.com/china/whdc/driver/kernel/KMcode.mspx</a><br>棣栧厛錛岀敤鎴鋒佷笅闈炲父寤変環(huán)鍑犱箮涓嶇敤鑰冭檻鐨勮祫婧愶紝鍦ㄥ唴鏍鎬腑鏄潪甯告槀璐電殑錛屾瘮濡傚唴鏍稿爢鏍堜竴鑸氨3涓猵age錛?/p> <p>鍦ㄥ唴鏍鎬笉鑳藉垎欏?paging)鏃跺繀欏諱繚璇佸皢琚墽琛岀殑鎵鏈変唬鐮佸拰鏁版嵁蹇呴』鏈夋晥鐨勯┗鐣欏湪鐗╃悊鍐呭瓨涓紝濡傛灉榪欐椂闇瑕佸椹葷暀鍑犲紶铏氳〃浠ュ強(qiáng)铏氳〃鎸囬拡閭h繕鏄樉寰楅潪甯告槀璐電殑錛屽悓鏃剁紪璇戝櫒涓鴻櫄鍑芥暟錛屾ā鏉跨瓑鐢熸垚浠g爜鐨勬柟寮忥紝璁╁紑鍙戜漢鍛樺緢闅劇‘瀹氳鎵ц涓涓嚱鏁版墍闇瑕佺殑鎵鏈変唬鐮佺殑鎵鍦ㄤ綅緗紝鍥犳涔熸棤娉曠洿鎺ユ帶鍒剁敤浜庡畨緗繖浜涗唬鐮佺殑鑺傦紙涓漢璁や負(fù)鍙兘閫氳繃progma segment/datasegment/codesegment瀵逛簬浠g爜鍜屾暟鎹繘琛岄泦涓帶鍒訛級(jí)錛屽洜姝ゅ湪闇瑕佽繖浜涗唬鐮佹椂錛屽彲鑳藉凡緇忚page out浜?jiǎn)锛?/p> <p>鎵鏈夋秹鍙?qiáng)绫诲眰娆【l撴瀯錛屾ā鏉匡紝寮傚父絳夌瓑榪欐牱鐨勪竴浜涜璦緇撴瀯鍦ㄥ唴鏍告佷腑閮藉彲鑳芥槸涓嶅畨鍏ㄧ殑錛屾渶濂芥槸鎶婄被鐨勪嬌鐢ㄩ檺瀹氫負(fù)POD綾伙紝鍥炲埌鎴戜滑鐨勪富棰樿櫄鍑芥暟錛屼篃灝辨槸璇村唴鏍告佷笅綾昏璁′腑娌℃湁铏氬嚱鏁般?/p> <img src ="http://www.shnenglu.com/flagman/aggbug/136254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/flagman/" target="_blank">flagman</a> 2010-12-13 08:57 <a href="http://www.shnenglu.com/flagman/archive/2010/12/13/WhyNotCPPadoptAllVirtualFuction.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://www.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://phitris.com" target="_blank">久热精品视频在线</a>| <a href="http://filmcameralibrary.com" target="_blank">亚洲韩国一区二区三区</a>| <a href="http://erosgems.com" target="_blank">国产精品美女久久久久aⅴ国产馆</a>| <a href="http://7777731.com" target="_blank">欧美精品久久久久久久久久</a>| <a href="http://520taose.com" target="_blank">欧美va天堂在线</a>| <a href="http://51120guahao.com" target="_blank">欧美h视频在线</a>| <a href="http://xy3977.com" target="_blank">欧美激情导航</a>| <a href="http://nagebbs.com" target="_blank">欧美日韩一区二区三区视频</a>| <a href="http://baidijs.com" target="_blank">欧美日韩中文字幕日韩欧美</a>| <a href="http://qdpetlove.com" target="_blank">国产精品久久久久国产精品日日 </a>| <a href="http://ziwufuren.com" target="_blank">欧美在线短视频</a>| <a href="http://b46n.com" target="_blank">久久精品国产91精品亚洲</a>| <a href="http://710477.com" target="_blank">久久精品亚洲一区</a>| <a href="http://wy172.com" target="_blank">欧美aa国产视频</a>| <a href="http://jinlijun.com" target="_blank">欧美日韩在线免费视频</a>| <a href="http://lampreydb.com" target="_blank">国产精品高潮呻吟视频</a>| <a href="http://xxtv123.com" target="_blank">国产精品尤物福利片在线观看</a>| <a href="http://9911444.com" target="_blank">国产拍揄自揄精品视频麻豆</a>| <a href="http://mmmm43.com" target="_blank">国语自产精品视频在线看一大j8</a>| <a href="http://dusenborg.com" target="_blank">黄色成人av网</a>| <a href="http://devwang.com" target="_blank">亚洲精选中文字幕</a>| <a href="http://zooxoft.com" target="_blank">亚洲一区999</a>| <a href="http://88488848.com" target="_blank">久久国产精品久久久久久电车</a>| <a href="http://mmmm57.com" target="_blank">久久久噜噜噜久久中文字免</a>| <a href="http://k-dchina.com" target="_blank">欧美福利精品</a>| <a href="http://725443.com" target="_blank">一本久道综合久久精品</a>| <a href="http://yp889.com" target="_blank">校园春色国产精品</a>| <a href="http://bjzgmember.com" target="_blank">久久一区国产</a>| <a href="http://66666556.com" target="_blank">欧美三级网页</a>| <a href="http://kinghongs.com" target="_blank">狠狠色狠狠色综合日日小说</a>| <a href="http://aqd1t.com" target="_blank">亚洲精品一区二区三区在线观看</a>| <a href="http://airsixth.com" target="_blank">亚洲视频在线观看</a>| <a href="http://lcqrsj.com" target="_blank">欧美一区三区三区高中清蜜桃</a>| <a href="http://69xxx6.com" target="_blank">久热这里只精品99re8久</a>| <a href="http://244223.com" target="_blank">亚洲激情在线播放</a>| <a href="http://cmtqd.com" target="_blank">欧美激情1区</a>| <a href="http://13751144594.com" target="_blank">在线视频中文亚洲</a>| <a href="http://8111357.com" target="_blank">久久久水蜜桃</a>| <a href="http://miya2223.com" target="_blank">欧美色综合天天久久综合精品</a>| <a href="http://cnbluebox.com" target="_blank">国产午夜精品理论片a级大结局</a>| <a href="http://miaoxp.com" target="_blank">亚洲第一中文字幕</a>| <a href="http://csjtzn.com" target="_blank">亚洲欧美电影在线观看</a>| <a href="http://621765.com" target="_blank">免费亚洲一区</a>| <a href="http://zzchanke.com" target="_blank">亚洲午夜国产一区99re久久</a>| <a href="http://www8888803.com" target="_blank">久久深夜福利</a>| <a href="http://91mase.com" target="_blank">国产精品av久久久久久麻豆网</a>| <a href="http://110673.com" target="_blank">狠狠88综合久久久久综合网</a>| <a href="http://www8888803.com" target="_blank">一本色道精品久久一区二区三区 </a>| <a href="http://by2866.com" target="_blank">亚洲午夜精品在线</a>| <a href="http://911mmm.com" target="_blank">久久中文欧美</a>| <a href="http://tavbao.com" target="_blank">国产精品丝袜白浆摸在线</a>| <a href="http://ybshg.com" target="_blank">亚洲国产精品va在看黑人</a>| <a href="http://wltaste.com" target="_blank">亚洲欧美日韩成人高清在线一区</a>| <a href="http://556995.com" target="_blank">另类av一区二区</a>| <a href="http://811897.com" target="_blank">亚洲一区二区三区高清</a>| <a href="http://376524.com" target="_blank">欧美本精品男人aⅴ天堂</a>| <a href="http://456kp.com" target="_blank">国产精品最新自拍</a>| <a href="http://216667.com" target="_blank">一区二区欧美在线观看</a>| <a href="http://laodaohang.com" target="_blank">麻豆精品精华液</a>| <a href="http://hczztj.com" target="_blank">亚洲一区二区三区在线</a>| <a href="http://609005.com" target="_blank">嫩草国产精品入口</a>| <a href="http://2016dp5330.com" target="_blank">国产伊人精品</a>| <a href="http://www-kkjj88.com" target="_blank">亚洲综合清纯丝袜自拍</a>| <a href="http://域名" target="_blank">亚洲欧洲三级电影</a>| <a href="http://baixinlocal.com" target="_blank">久久蜜桃香蕉精品一区二区三区</a>| <a href="http://7a7d.com" target="_blank">国产精品理论片在线观看</a>| <a href="http://868482.com" target="_blank">亚洲精品一区在线观看</a>| <a href="http://cca22.com" target="_blank">久久综合网色—综合色88</a>| <a href="http://www5123ri.com" target="_blank">亚洲伊人第一页</a>| <a href="http://k91cm.com" target="_blank">欧美日韩免费高清一区色橹橹</a>| <a href="http://by2735.com" target="_blank">精品69视频一区二区三区</a>| <a href="http://www-94889.com" target="_blank">亚洲欧美激情四射在线日</a>| <a href="http://25axxa.com" target="_blank">亚洲日本成人网</a>| <a href="http://5yy6.com" target="_blank">开心色5月久久精品</a>| <a href="http://luoliguo.com" target="_blank">国产日韩欧美91</a>| <a href="http://aabbcc11.com" target="_blank">亚洲欧美中文字幕</a>| <a href="http://www-kj8777.com" target="_blank">亚洲伦理精品</a>| <a href="http://ctmhotel.com" target="_blank">欧美激情久久久久</a>| <a href="http://hgx123.com" target="_blank">亚洲国产精品久久91精品</a>| <a href="http://119773.com" target="_blank">久久香蕉国产线看观看网</a>| <a href="http://770456.com" target="_blank">亚洲欧美日本视频在线观看</a>| <a href="http://36seaa.com" target="_blank">国产精品av久久久久久麻豆网</a>| <a href="http://by66336.com" target="_blank">亚洲乱码一区二区</a>| <a href="http://wwwiqiuxia.com" target="_blank">亚洲成人在线视频网站</a>| <a href="http://sz-jyqj.com" target="_blank">欧美中文字幕在线</a>| <a href="http://icciran.com" target="_blank">国产午夜精品视频免费不卡69堂</a>| <a href="http://bcjianyan.com" target="_blank">亚洲欧美大片</a>| <a href="http://myasker.com" target="_blank">中国成人黄色视屏</a>| <a href="http://cscjxs.com" target="_blank">国产精品成人一区</a>| <a href="http://alex-bruni.com" target="_blank">亚洲私人影院在线观看</a>| <a href="http://tizenkorea.com" target="_blank">亚洲日本久久</a>| <a href="http://gmqgw.com" target="_blank">欧美精品一区在线观看</a>| <a href="http://004ttt.com" target="_blank">亚洲美女中文字幕</a>| <a href="http://057232.com" target="_blank">亚洲激情中文1区</a>| <a href="http://hoppecoke.com" target="_blank">欧美成在线视频</a>| <a href="http://neudlac.com" target="_blank">亚洲精品乱码久久久久久</a>| <a href="http://457745.com" target="_blank">亚洲电影观看</a>| <a href="http://8181777.com" target="_blank">欧美国产91</a>| <a href="http://194123.com" target="_blank">日韩小视频在线观看</a>| <a href="http://sdgs6788.com" target="_blank">亚洲精品1区2区</a>| <a href="http://bjrailtech.com" target="_blank">欧美激情aⅴ一区二区三区</a>| <a href="http://077229.com" target="_blank">日韩亚洲国产欧美</a>| <a href="http://www789yys.com" target="_blank">最新高清无码专区</a>| <a href="http://dadepaimai.com" target="_blank">欧美国产另类</a>| <a href="http://zhuankee.com" target="_blank">一区二区三区日韩在线观看</a>| <a href="http://725806.com" target="_blank">亚洲精品永久免费</a>| <a href="http://www37999.com" target="_blank">欧美性片在线观看</a>| <a href="http://cn1898.com" target="_blank">午夜精品久久久久久久</a>| <a href="http://wallypanel.com" target="_blank">亚洲欧美另类中文字幕</a>| <a href="http://004ttt.com" target="_blank">国产日韩在线看片</a>| <a href="http://511caifu.com" target="_blank">老司机精品导航</a>| <a href="http://83wn.com" target="_blank">欧美sm视频</a>| <a href="http://2589999.com" target="_blank">99视频精品</a>| <a href="http://3597777.com" target="_blank">在线一区观看</a>| <a href="http://chinagreetown.com" target="_blank">国产精品美女久久久久久免费</a>| <a href="http://www-273111.com" target="_blank">午夜精品三级视频福利</a>| <a href="http://18mmcg.com" target="_blank">性色av香蕉一区二区</a>| <a href="http://jnjpsm.com" target="_blank">永久域名在线精品</a>| <a href="http://syfeichi.com" target="_blank">亚洲国产精品v</a>| <a href="http://xmzszx.com" target="_blank">欧美调教vk</a>| <a href="http://konwoosh.com" target="_blank">亚洲欧美日韩视频一区</a>| <a href="http://yw133777.com" target="_blank">亚洲女女女同性video</a>| <a href="http://5101h.com" target="_blank">国产亚洲精品激情久久</a>| <a href="http://jkllkg.com" target="_blank">女人香蕉久久**毛片精品</a>| <a href="http://arielteam.com" target="_blank">欧美电影电视剧在线观看</a>| <a href="http://95gun.com" target="_blank">中文av字幕一区</a>| <a href="http://bizssr.com" target="_blank">欧美一区1区三区3区公司</a>| <a href="http://1390555.com" target="_blank">亚洲国产激情</a>| <a href="http://xccp4888.com" target="_blank">一区二区三区三区在线</a>| <a href="http://6399128.com" target="_blank">国产区在线观看成人精品</a>| <a href="http://dk13studio.com" target="_blank">免费高清在线视频一区·</a>| <a href="http://345fz.com " target="_blank">欧美国产日韩二区</a>| <a href="http://6767673.com" target="_blank">亚洲欧美日韩一区二区三区在线</a>| <a href="http://jxyptsw.com" target="_blank">香港成人在线视频</a>| <a href="http://nxyhbz.com" target="_blank">亚洲成人在线观看视频</a>| <a href="http://44cgcg.com" target="_blank">亚洲伦伦在线</a>| <a href="http://jiuzuifusheng.com" target="_blank">国产日韩精品一区二区三区在线</a>| <a href="http://81ffff.com" target="_blank">欧美国产日韩在线</a>| <a href="http://spyfaw.com" target="_blank">国产精品分类</a>| <a href="http://bkf23.com" target="_blank">蜜桃av一区二区在线观看</a>| <a href="http://979695.com" target="_blank">欧美国产日韩一二三区</a>| <a href="http://sp106.com" target="_blank">午夜免费久久久久</a>| <a href="http://chunhuigk.com" target="_blank">久久综合伊人77777麻豆</a>| <a href="http://b46n.com" target="_blank">亚洲一区三区电影在线观看</a>| <a href="http://862323.com" target="_blank">久久精品国产亚洲高清剧情介绍 </a>| <a href="http://123yongjiu.com" target="_blank">欧美chengren</a>| <a href="http://tk99444.com" target="_blank">欧美性大战久久久久久久</a>| <a href="http://aass22.com" target="_blank">久久久夜色精品亚洲</a>| <a href="http://sp106.com" target="_blank">欧美精品久久久久久久免费观看</a>| <a href="http://sexx777.com" target="_blank">欧美在现视频</a>| <a href="http://mkaqiu.com" target="_blank">欧美精品一区在线播放</a>| <a href="http://668756.com" target="_blank">久久亚洲春色中文字幕</a>| <a href="http://xuduoshu.com" target="_blank">欧美日本在线看</a>| <a href="http://www49797.com" target="_blank">麻豆av一区二区三区久久</a>| <a href="http://92ebook.com" target="_blank">欧美视频久久</a>| <a href="http://66666556.com" target="_blank">欧美激情第4页</a>| <a href="http://66jj99.com" target="_blank">国产日韩精品在线观看</a>| <a href="http://luqintang.com" target="_blank">91久久精品国产</a>| <a href="http://xcao10.com" target="_blank">韩国一区二区三区美女美女秀</a>| <a href="http://nc04.com" target="_blank">99国产精品99久久久久久</a>| <a href="http://7811c.com" target="_blank">在线播放精品</a>| <a href="http://haochen072.com" target="_blank">亚洲欧美国产一区二区三区</a>| <a href="http://wxtarena.com" target="_blank">亚洲精品免费看</a>| <a href="http://www-74987.com" target="_blank">久久国产婷婷国产香蕉</a>| <a href="http://8xn66w.com" target="_blank">亚洲午夜未删减在线观看</a>| <a href="http://xaxkizlar.com" target="_blank">久久综合国产精品台湾中文娱乐网</a>| <a href="http://7811c.com" target="_blank">亚洲一区日本</a>| <a href="http://4254888.com" target="_blank">欧美区在线观看</a>| <a href="http://clwjbcxs.com" target="_blank">模特精品在线</a>| <a href="http://5252bnet.com" target="_blank">国产视频不卡</a>| <a href="http://54zcr.com" target="_blank">亚洲一区二区成人在线观看</a>| <a href="http://kdy444.com" target="_blank">亚洲精品视频免费在线观看</a>| <a href="http://66666556.com" target="_blank">欧美专区18</a>| <a href="http://thisisfil.com" target="_blank">欧美亚洲日本网站</a>| <a href="http://998609.com" target="_blank">欧美日韩视频第一区</a>| <a href="http://97caoporm.com" target="_blank">亚洲第一二三四五区</a>| <a href="http://clwjbcxs.com" target="_blank">国模 一区 二区 三区</a>| <a href="http://shaijia123.com" target="_blank">99精品欧美一区二区三区</a>| <a href="http://100736.com" target="_blank">亚洲第一色在线</a>| <a href="http://devwang.com" target="_blank">亚洲专区一区</a>| <a href="http://by56677.com" target="_blank">在线综合+亚洲+欧美中文字幕</a>| <a href="http://521mu.com" target="_blank">米奇777超碰欧美日韩亚洲</a>| <a href="http://wwwen41.com" target="_blank">久久精品视频在线观看</a>| <a href="http://chuangke168.com" target="_blank">欧美日韩精品综合</a>| <a href="http://www3344cao.com" target="_blank">亚洲第一天堂av</a>| <a href="http://www-77537.com" target="_blank">亚洲二区在线观看</a>| <a href="http://hsxinbao.com" target="_blank">久久精品欧洲</a>| <a href="http://www66441.com" target="_blank">久久久噜噜噜久噜久久</a>| <a href="http://678665.com" target="_blank">国产日韩高清一区二区三区在线</a>| <a href="http://vpay1314.com" target="_blank">在线亚洲观看</a>| <a href="http://44779c.com" target="_blank">亚洲素人一区二区</a>| <a href="http://2015xiaomingkankan.com" target="_blank">欧美高清视频一区</a>| <a href="http://44779c.com" target="_blank">亚洲国产精品久久久久秋霞蜜臀</a>| <a href="http://8xyxs1.com" target="_blank">在线精品观看</a>| <a href="http://ycpeixun.com" target="_blank">久久综合久色欧美综合狠狠</a>| <a href="http://233116.com" target="_blank">免费亚洲电影在线观看</a>| <a href="http://337795.com" target="_blank">亚洲国产精品久久91精品</a>| <a href="http://11867a.com" target="_blank">免费短视频成人日韩</a>| <a href="http://y65y.com" target="_blank">欧美黄色成人网</a>| <a href="http://414794.com" target="_blank">亚洲欧洲综合另类</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>