锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲日本欧美在线,国产精品日韩欧美一区,国产午夜精品视频免费不卡69堂http://www.shnenglu.com/flagman/ 鍞愪寒鐨勪釜浜烘妧鏈崥瀹? 銆愭榪庤漿杞斤紝浣嗚鏍囨槑鍘熶綔鑰呫?/description>zh-cnMon, 29 Sep 2025 11:27:57 GMTMon, 29 Sep 2025 11:27:57 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 鍙戣〃璇勮
]]>
鎿嶄綔緋葷粺鎬庝箞鏍規嵁涓涓狧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
: 緙栬瘧鍣ㄦ庝箞鏍規嵁榪欎釜鍙ユ焺鎵懼埌CMyButton鐨勪唬鐮佺殑錛?/em>

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

 


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

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

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

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

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

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

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

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

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

鑰呮寚閽堬級鏉ユ搷浣滃搴旂殑鍏寵仈鑷畾涔夋暟鎹紱寰堝鍚庢潵鍑虹幇鐨勬鏋訛紝涔熼兘浣跨敤浜嗚繖涓猠xtra bytes鍩燂紝鏉ュ瓨鏀?/p>

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

鎬ф槸寰箮鍏跺井浜嗭紝浣嗘槸濡傛灉瑕佸仛濂藉師鐢熷簲鐢ㄧ殑寮鍙戯紝寰堝搴曞眰鐨勫疄鐜扮粏鑺傛渶瑕佽繕鏄鐭ラ亾涓涓嬶紝浠ヤ究浜?/p>

浼樺寲緇撴瀯鍜屾ц兘錛屼互鍙婂嚭閿欐椂鐨勮皟璇曞鐞嗭紱鍥犱負鏃犺鏄疻inform/WPF錛岃繕鏄法騫沖彴鐨刉TL/QT/WxWindows絳?/p>

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

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

 



flagman 2011-04-04 14:16 鍙戣〃璇勮
]]>
TC SRM144DIV2 鍗冨垎棰橀瑙?/title><link>http://www.shnenglu.com/flagman/archive/2011/02/27/SRM144DIV2_KP.html</link><dc:creator>flagman</dc:creator><author>flagman</author><pubDate>Sun, 27 Feb 2011 09:09:00 GMT</pubDate><guid>http://www.shnenglu.com/flagman/archive/2011/02/27/SRM144DIV2_KP.html</guid><wfw:comment>http://www.shnenglu.com/flagman/comments/140741.html</wfw:comment><comments>http://www.shnenglu.com/flagman/archive/2011/02/27/SRM144DIV2_KP.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/flagman/comments/commentRss/140741.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flagman/services/trackbacks/140741.html</trackback:ping><description><![CDATA[<p>榪欓亾鍗冨垎棰橈紝鍏跺疄鏄尯鏈夋剰鎬濈殑涓棰橈細<br>鎻愪緵浜嗙偣錛堣繖閲屾槸junction錛夊拰鐐逛箣闂寸殑璺濈錛堟垨浠d環錛夛紱<br>瑕佹眰浠ユ渶鐭殑璺濈錛堟垨鏈灝忎唬浠鳳級閬嶅巻鎵鏈夌殑鐐癸紝鍚屾椂姣忎釜鐐瑰彲浠ュ嬈¤闂紱</p> <p>鍒濈湅涔嬩笅錛岀粰浜虹殑鎰熻鏄浘璁虹浉鍏崇殑闂錛屾瘮濡傛梾琛岃呴棶棰樸佹鎷夌幆娓鎬箣綾匯?/p> <p>鍦ㄦ濊冭繖涓棶棰樼殑鏃跺欙紝蹇界劧闂磋仈鎯沖埌浜嗗浘璁轟腑鐨勬渶灝忕敓鎴愭爲錛岃櫧鐒跺茍涓嶆槸鐪熸瑕佸幓寰楀嚭鏈灝忕敓鎴愭爲錛?/p> <p>浣嗘槸鎸夌収鏈灝忕敓鎴愭爲鎵鎻愪緵鐨勬濊礬--榪欑偣寰堥噸瑕?-閭e氨鏄浘鍜屾爲涔嬮棿鏈夌潃鐩稿綋瀵嗗垏鐨勫叧緋伙細鍗充嬌鏈灝忕敓</p> <p>鎴愭爲騫朵笉鑳界洿鎺ヨВ鍐寵繖涓棶棰橈紝浣嗘槸瀹冧滑涔嬮棿瀛樺湪鐨勮繖灞傚叧緋葷殑紜彁渚涗簡瑙e喅闂鐨勪竴涓湁鐩婄殑灝濊瘯鏂?/p> <p>鍚戯紱</p> <p>浜庢槸錛屾濊冭繘浜嗕竴姝ワ紝闂浠?#8220;鍥?#8221;綆鍖栨垚浜?#8220;鏍?#8221;--濡備綍鎶婂綋鍓嶈繖涓棶棰橀噰鐢ㄦ爲鐨勭粨鏋勫拰鏂規硶琛ㄨ揪鍑?/p> <p>鏉ワ細鏍戠殑鏍硅妭鐐癸紝寰堣嚜鐒跺湴鎯沖埌浜嗙敱闂涓梾琛岀殑璧峰鑺傜偣鏉ヨ〃杈撅紱鐒跺悗錛岄殢鐫鑺傜偣鐨勪笉鏂姞鍏ワ紝鏍戝氨</p> <p>鑷劧鍦扮敓鎴愶紝姝ゅ鐨勫叧閿湪浜庡浣曠敓鎴愶紝鎴栬呰鑺傜偣鍔犲叆鐨勮鍒欙紝浠ュ強姣忎釜鑺傜偣涓轟簡閫傚簲榪欎釜瑙勫垯錛屾墍</p> <p>蹇呴』鎸佹湁鐨勭浉鍏沖睘鎬т俊鎭細鏈鐩存帴鐨勶紝鐖跺瓙鑺傜偣涔嬮棿鐨勫叧緋婚渶瑕佺淮鎶わ紝浠庣埗鑺傜偣鍒板瓙鑺傜偣鐨勮窛紱伙紙鎴栦唬</p> <p>浠鳳級蹇呴』瑕佷繚鐣欙紝鍏舵錛岃冭檻鍒板鏋滄瘡涓妭鐐歸兘緇存姢鐩稿叧鐨勮窛紱伙紙浠d環錛変俊鎭紝閭d箞浠庡綋鍓嶈妭鐐瑰埌鏍硅妭</p> <p>鐐圭殑浠d環涔熷氨鍙互鐢辨閫掓帹寰楀嚭錛岃繘涓姝ワ紝鎴戜滑鎵瑕佹眰鍑虹殑鏈鐭礬寰勶紙鎴栨渶灝忎唬浠鳳級涓嶅氨鍙互浠庝笂榪拌繖</p> <p>浜涜妭鐐逛腑緇存姢鐨勮窛紱諱俊鎭腑寰楀嚭鍚楋紵榪欐槸闈炲父鍏抽敭鐨勪竴姝ワ紝瀹冩妸褰撳墠鎴戜滑鏋勫緩鐨勬暟鎹粨鏋勫拰闂鐨勮姹?/p> <p>涔嬮棿寤虹珛璧蜂簡鐩稿綋鐩存帴鐨勮仈緋匯傝繖璇存槑鎴戜滑鐩墠鎬濊冪殑鏂瑰悜鏄湁浠峰肩殑鑰屼笖鏋佹湁鍙兘欏虹潃榪欎釜鏂瑰悜鍓嶈</p> <p>錛屽彲浠ュ緱鍑虹浉褰撲笉閿欑殑緇撴灉銆?/p> <p>鏄劇劧錛屾棦鐒惰姹傛渶鐭礬寰勶紙鏈灝忎唬浠鳳級錛岄偅涔堟垜浠洰鍓嶆瀯寤哄嚭鐨勮繖棰桱unction鏍戯紙鍥犱負鍏朵笂鐨勮妭鐐瑰湪棰?/p> <p>涓殑鐗╃悊鍚箟鏄唬琛↗unction錛岄偅榪欓噷鎴戜滑灝卞涓旂О鍏朵負Junction Tree錛夛紝鏍戜笂鐨勬瘡涓妭鐐逛篃搴斿綋淇濈暀</p> <p>鍦ㄥ叾涔嬩笅鐨勫瓙鏍戠殑鏈鐭礬寰勶紙鏈灝忎唬浠鳳級錛岃繖灝辯浉褰撲簬鎶婃瘡涓妭鐐歸兘浣滀負鏍硅妭鐐癸紝鐒跺悗姹傚嚭鍚勬潯瀛愯礬寰?/p> <p>鐨勪唬浠鳳紝騫舵瘮杈冨緱鍑烘渶鐭礬寰勶紙鏈灝忎唬浠鳳級錛屼互鍙婂湪榪欐潯鏈鐭礬寰勪笂鐨勭洿鎺ュ瓙鑺傜偣錛?/p> <p>姣忓姞鍏ヤ竴涓瓙鑺傜偣錛屽氨瑕佸涓婅堪宸叉瀯寤哄嚭鐨勮繖浜涙暟鎹粨鏋勪腑鐨勪俊鎭繘琛岀淮鎶わ紝浠ヨ皟鏁存瘡涓妭鐐瑰綋鍓嶇殑鏈</p> <p>鐭礬寰勪唬浠峰拰鐩稿簲榪欐潯璺緞涓婄殑鐩存帴瀛愯妭鐐癸紱褰撴墍鏈夊師“鍥?#8221;涓殑“杈?#8221;淇℃伅錛屼篃灝辨槸</p> <p>(fromJunction,toJuction,ductLength)鎵浠h〃鐨勶紙璧峰鐐癸紝緇堟鐐癸紝闀垮害浠d環錛夛紝閮芥寜鐓т笂榪版柟妗堝姞鍏?/p> <p>Juction Tree涔嬪悗錛屾垜浠彲浠ョ煡閬撲粠鏈鍒濈殑璧峰鑺傜偣錛堜篃灝辨槸Junction Tree鐨勬牴鑺傜偣錛夊埌鏈緇堣妭鐐圭殑錛?/p> <p>Junction Tree涓婄殑鏌愭潯璺緞涓婄殑鍙跺瓙鑺傜偣錛夌殑鏈鐭紙鏈灝忎唬浠鳳級璺緞浜嗐?/p> <p>瀵逛簬Juction Tree榪欎釜ADT鎶借薄鏁版嵁緇撴瀯鐨勫叿浣撳疄鐜幫紝鑰冭檻鍒頒紭鍏堥槦鍒椾腑浜屽弶鍫嗙殑緇忓吀瀹炵幇寰寰浣跨敤鏁扮粍</p> <p>錛屽悓鏃朵篃涓轟簡絎﹀悎TC SRM涓璐殑綆鎹鋒槑蹇殑紼嬪簭璁捐椋庢牸錛屾垜浠繖閲屽悓鏃朵嬌鐢ㄥ嚑涓暟緇勬潵緇存姢鍓嶈堪鏋勫緩</p> <p>鍑虹殑鏁版嵁緇撴瀯銆?/p> <p>//////////////////////////////////////////////////////////////////////////////////////////</p> <p>#include<cstdlib><br>#include<vector><br>#include<set><br>using namespace std;</p> <p>const int NIL = -1;<br>const int MAX = 50;</p> <p>int Cost[MAX];<br>int ParentNode[MAX];<br>int MaxSubNode[MAX];<br>int MaxSubCost[MAX];</p> <p>class PowerOutage<br>{<br>public:<br> int estimateTimeOut(vector<int> fromJunction, vector<int> toJunction, vector<int> </p> <p>ductLength)<br> {<br>  if (!CheckParameter(fromJunction, toJunction, ductLength)) return NIL;<br>  <br>  Ini();<br>  int count = fromJunction.size();<br>  for (int i = 0; i < count; i++)<br>  {<br>   AddNode(fromJunction[i], toJunction[i], ductLength[i]);<br>  }<br>  <br>  return CalculateMinCost(fromJunction, toJunction, ductLength);<br> }<br>private:<br> void Ini()<br> {<br>  memset(Cost, NIL, sizeof(int) * MAX);<br>  memset(ParentNode, NIL, sizeof(int) * MAX);<br>  memset(MaxSubNode, NIL, sizeof(int) * MAX);<br>  memset(MaxSubCost, 0, sizeof(int) * MAX);<br> }<br> <br> bool CheckParameter(const vector<int>& fromJunction, const vector<int>& toJunction, </p> <p>const vector<int>& ductLength)<br> {<br>  if (fromJunction.size() != toJunction.size() || toJunction.size() != </p> <p>ductLength.size())<br>   return false;<br>  return true;<br> }<br> <br> void AddNode(int parent, int child, int cost)<br> {<br>  if (parent < 0 || child < 0 || cost < 0) return;<br>  <br>  Cost[child] = cost;<br>  ParentNode[child] = parent;<br>  <br>  int curParent = parent, curChild = child;<br>  bool adjustParentCost = true;<br>  while (adjustParentCost && curParent != NIL)<br>  {<br>   int candidateParentMaxSubCost = Cost[curChild] + MaxSubCost</p> <p>[curChild];<br>   if (MaxSubCost[curParent] < candidateParentMaxSubCost)<br>   {<br>    MaxSubCost[curParent] = candidateParentMaxSubCost;<br>    MaxSubNode[curParent] = curChild;<br>    <br>    curChild = curParent;<br>    curParent = ParentNode[curParent];<br>   }<br>   else<br>   {<br>    adjustParentCost = false;<br>   }<br>  }<br> }<br> <br> int CalculateMinCost(const vector<int>& fromJunction, const vector<int>& </p> <p>toJunction, const vector<int>& ductLength)<br> {<br>  int len = fromJunction.size();<br>  int minCost = 0;<br>  <br>  set<int> minCostPath;<br>  minCostPath.insert(0);<br>  int curNode = MaxSubNode[0];<br>  while(curNode != NIL)<br>  {<br>   printf("%d;",curNode); // print the min cost path<br>   <br>   minCostPath.insert(curNode);<br>   curNode = MaxSubNode[curNode];<br>  }<br>  <br>  for (int i = 0; i < len; i++)<br>  {<br>   if (minCostPath.find(toJunction[i]) == minCostPath.end())<br>    minCost += 2 * ductLength[i];<br>   else<br>    minCost += ductLength[i];<br>  }<br>  <br>  return minCost;<br> }<br>};</p> <img src ="http://www.shnenglu.com/flagman/aggbug/140741.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> 2011-02-27 17:09 <a href="http://www.shnenglu.com/flagman/archive/2011/02/27/SRM144DIV2_KP.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍙嶅皠鐨勭壒鎬ф槸緇忓父浼氫嬌鐢ㄥ埌鐨?/title><link>http://www.shnenglu.com/flagman/archive/2011/02/12/reflection_feature_used_in_daily_dev.html</link><dc:creator>flagman</dc:creator><author>flagman</author><pubDate>Sat, 12 Feb 2011 09:21:00 GMT</pubDate><guid>http://www.shnenglu.com/flagman/archive/2011/02/12/reflection_feature_used_in_daily_dev.html</guid><wfw:comment>http://www.shnenglu.com/flagman/comments/139944.html</wfw:comment><comments>http://www.shnenglu.com/flagman/archive/2011/02/12/reflection_feature_used_in_daily_dev.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/flagman/comments/commentRss/139944.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flagman/services/trackbacks/139944.html</trackback:ping><description><![CDATA[<p><em>銆?鏌愮綉鍙嬭璁洪亾: 銆?br>: RT錛屽弽灝勭殑鐗規у彂鐜板緢灝戠敤鍟?/em><br></p> <p><br><br>鎭版伆鐩稿弽錛屾湁浜涘弽灝勭殑鐗規ф槸緇忓父浼氳浣跨敤鍒扮殑銆?/p> <p>鍙嶅皠鎬諱綋涓婂垎鎴愪袱澶х壒鎬э紝涓鏄嚜鐪侊紝浜屾槸鍙戝皠錛?/p> <p>鑷渷鐨勮兘鍔涙瀬涓洪噸瑕侊紝鑰屼笖鍑犱箮浼氬ぉ澶╃敤鍒幫紝寰堝皯瑙佸埌榪囧摢涓?net搴旂敤涓笉浣跨敤attribute鐨勶紝鑰宎ttribute鐗規у氨鏄痬etadata閫氳繃鍦ㄨ嚜鐪佽兘鍔涙敮鎾戜笅瀹炵幇鐨勶紱褰撶劧鑷渷涓嶅崟鍗曟槸attribute鐗規х殑榪愮敤錛屽彧瑕佹槸鍦ㄨ繍琛屾椂鍔ㄦ佹瑙嗙▼搴忚嚜韜殑鐗規ч兘瑕佺敱鍙嶅皠鐨勮嚜鐪佽兘鍔涙潵鏀寔錛屾瘮濡俈isual Studio鐨処DE錛堣繖涓泦鎴愬紑鍙戠幆澧冩湰韜氨鏄?net搴旂敤鐨勫ソ妗堜緥錛夊浜?net緇勪歡鐨勮嚜鍔ㄦ帰嫻嬪姛鑳斤紱鍚屾椂錛岃嚜鐪佺殑鑳藉姏涔熸槸鍩轟簬铏氭嫙鏈哄鉤鍙扮殑璇█錛屾瘮濡俢#鍜宩ava錛屽尯鍒簬浼犵粺璇█姣斿c鍜宑++鐨勯噸瑕佺壒鎬т箣涓錛岃繖鎻愪緵浜嗙▼搴忚璁″紑鍙戞洿涓轟究鍒╁拰瀹夊叏鐨勮繍琛屾椂鐜錛涚浉瀵硅岃█錛屽湪c++錛堝綋鐒舵槸native鑰屼笉鏄痬anaged錛夌殑鐜涓嬶紝闄や簡RTTI鏋佷負鍗曡杽鐨勮繍琛屾椂鑷渷錛屼篃灝辨槸QT榪欎釜搴撻氳繃meta-object system閮ㄥ垎妯℃嫙浜嗚嚜鐪佺殑鐗規э紱</p> <p>鍙嶅皠鐨勫彟澶栦竴涓噸瑕佺壒鎬у氨鏄彂灝勶紝瀹冭“紼嬪簭鍙互鍐欑▼搴?#8221;浜嗭紝綆瑕佺殑璇村氨鏄湪榪愯鏃跺姩鎬佺敓鎴怣SIL騫跺姞杞借繍琛屼互鍙婃寔涔呭寲鍔ㄦ佺敓鎴愮殑MSIL鐨勮兘鍔涳紱鐢辮繖涓壒鎬х殑鏀寔錛岃鍘熷厛涓浜涚▼搴忚璁″拰寮鍙戦鍩熺浉瀵瑰洶闅懼拰綣佺悙鐨勫伐浣滐紝姣斿鍏冪紪紼媘eta programming錛屾瘮濡傚姩鎬佷唬鐞哾ynamic proxy錛屾瘮濡侫OP涓殑鍩虹璁炬柦weaver鐨勫疄鐜幫紝鍙樺緱鍙兘鎴栫浉瀵規槗浜庡疄鐜幫紱鍙嶅皠鐨勭壒鎬э紝涔熸槸鍩轟簬铏氭嫙鏈哄鉤鍙癈LR鐨勬敮鎸侊紝浠etadata涓哄熀紜鏉ュ疄鐜扮殑錛屾墍浠ヨ繖涔熸槸铏氭嫙鏈哄鉤鍙拌璦鐨勭壒鏈変紭鍔匡紝鑰屽湪浼犵粺璇█騫沖彴涓婏紝榪欐槸闅句互瀹炵幇鐨勶紱姣斿鍏充簬meta programming錛宑++灝辨槸閫氳繃妯℃澘鐗規у疄鐜扮殑緙栬瘧鏈焟eta programming錛岃繖涓庤櫄鎷熸満騫沖彴涓婂疄鐜扮殑榪愯鏃秏eta programming榪樻槸鏈夋瘮杈冨ぇ鐨勫樊璺濓紙姣斿鍓嶈呭浣曚繚璇佺敓鎴愮殑浠g爜鐨則ype-safe錛夛紱</p> <p>浠ヤ笂榪欎袱涓壒鎬э紝鑷渷鍜屽彂灝勶紝閮芥湁涓叡鍚岀偣錛屼粬浠兘鏄洿緇曠潃metadata鏈哄埗錛屽茍鍦ㄨ櫄鎷熸満騫沖彴榪愯鏃剁幆澧僀LR鏀寔涓嬪疄鐜扮殑錛屽墠鑰呮槸榪愯鏃舵瑙嗙浉鍏崇殑metadata錛屽悗鑰呮槸榪愯鏃跺姩鎬佺敓鎴愮浉鍏崇殑metadata鍜孧SIL錛涗粠榪欑偣涔熷氨鍙互鐪嬪嚭錛岃鎯蟲繁鍏ョ悊瑙h繖浜涚壒鎬э紝灝遍渶瑕佺爺絀秏etadata鍜孧SIL鐨勫疄鐜幫紝浠ュ強铏氭嫙鏈鴻繍琛屾椂鐜鐨勫疄鐜幫紙鍦╦ava騫沖彴涓婏紝灝辨槸bytecode鍜孞VM錛夛紱</p> <p>鎵浠ワ紝鍙嶅皠錛屽彲鑳芥槸铏氭嫙鏈哄鉤鍙版墍鎻愪緵鐨勭浉瀵規渶涓哄己鍔詫紝鏈涓哄鏉傦紝鍜屽鉤鍙拌繍琛屾椂鏈韓鍏崇郴鏈瀵嗗垏錛屼篃鏄尯鍒簬浼犵粺璇█鍜岃繍琛屾椂鏈椴滄槑鐨勭壒鎬с?/p> <img src ="http://www.shnenglu.com/flagman/aggbug/139944.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> 2011-02-12 17:21 <a href="http://www.shnenglu.com/flagman/archive/2011/02/12/reflection_feature_used_in_daily_dev.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>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簡銆傛墍浠TL鐪嬭搗鏉ユ墠浼氬儚澶╀功涓鑸?/em></p> <p><br>铏界劧瀵逛簬鍏ㄦ柊鐨勫伐紼嬮」鐩紝鎺ㄨ崘閫氳繃.net瀹炵幇錛屼絾鏄紝鍙浣犲伐浣滃湪Windows騫沖彴涓婏紝蹇呯劧浼氶亣鍒板拰COM鐩稿叧鐨勬妧鏈拰鏈哄埗錛屾棤璁烘槸澶ч噺鐨刲egacy鐨勫伐紼嬪拰浠g爜錛岃繕鏄綔涓篛S閲嶈鍔熻兘浠ュ強native緇勪歡鐨勯閫変氦浜掑艦寮忓拰鎺ュ彛鏆撮湶鏂瑰紡錛屾瘮濡侱irectX API錛屾瘮濡備竴浜沇MI鐨凙PI錛涙渶鏈夎叮鐨勬槸錛屽嵆浣挎槸.net鐨勬牳蹇僀LR鏈韓涔熸槸涓涓狢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+鎵鎻愪緵榪欎簺鏈哄埗錛屽彧鏄畝鍗曠殑灝佽浜嗗悗鑰呫?/p> <p>COM鎶鏈腑鍙兘鏈変竴浜涙瘮杈冨洶闅劇殑鍦版柟錛屾帴鍙g殑涓鑷存э紝瀵硅薄鐨勮仛鍚堝拰鐢熷懡鍛ㄦ湡錛屽闂達紝璺ㄥ闂寸殑鎺ュ彛璁塊棶錛屽悕瀛楀璞★紝絳夌瓑錛涜繖浜涘茍涓嶆槸COM瑙勮寖浜轟負鍒墮犵殑鍥伴毦錛岃屾槸涓轟簡璁捐鍜屾彁渚涳紝鍙互璺ㄨ繘紼嬪拰鏈哄櫒杈圭晫錛岃法寮傛瀯騫沖彴錛堝綋鐒跺繀欏誨疄鐜頒簡COM鎵瑙勫畾鐨勫熀紜鏈嶅姟錛夛紝閫忔槑鍖栧叿浣撳璞$被鍨嬪強瀵硅薄鐢熷懡鍛ㄦ湡錛屼究浜庣粺涓閮ㄧ講鍜岀増鏈鐞嗙殑緇勪歡鎶鏈紝鎵蹇呴』浠樺嚭鐨勪唬浠鳳紝榪欎釜浠d環浠庡紑鍙戜漢鍛樿搴︾湅鍏蜂綋琛ㄧ幇涓猴紝姒傚康鐞嗚В鐨勫洶闅句互鍙婂叿浣撲簩榪涘埗瀹炵幇鐨勫洶闅撅紱</p> <p>涓嶈繃浠庡彟涓涓搴︾湅錛孋OM宸茬粡寰堝鏄撲簡錛?br>a) COM瑙勮寖宸叉妸瑕佽揪鑷磋繖浜涚洰鏍囩殑緋葷粺錛屾墍蹇呴』鎻愪緵鐨勬帴鍙e拰鐗規ф娊璞′簡鍑烘潵錛屽彧涓嶈繃涓轟簡琛ㄨ揪榪欎簺鎶借薄鐨勬蹇佃屾柊閫犵殑鏈鍚嶈瘝鏈変簺闄岀敓鍜岀獊鍏錛涘鏋滆閬囧埌鐩鎬技闂鐨勬瘡涓涓璁″拰寮鍙戜漢鍛橀兘鑷繁鏉ュ仛鎶借薄錛屾湭蹇呬細鐢熸垚鏇村ソ鐨勬柟妗堬紱</p> <p>b) 涓轟簡甯姪璁捐鍜屽紑鍙戜漢鍛橈紝浜轟滑鎻愪緵浜嗗緢澶氱殑寮鍙戝簱錛屼互鎻愰珮COM寮鍙戠殑姝g‘鎬у拰鏁堢巼錛涙渶鏄捐憲鐨勫氨鏄疢FC涓叧浜嶤OM/OLE鐨勮緟鍔╃被鍜屽嚱鏁幫紝浠ュ強涓轟簡COM鑰岀敓鐨凙TL錛涗粠鏈川涓婄湅錛岃繖浜涚被搴撻兘鏄妸COM瑙勮寖涓繀欏誨疄鐜扮殑錛學indows騫沖彴鏈韓娌℃湁鎻愪緵錛屽叿浣撹璁″拰寮鍙戜漢鍛樺疄闄呭疄鏂芥椂浼氶噸澶嶅疄鐜扮殑錛屽悓鏃跺張闈炲父瀹規槗鍑洪敊鐨勯偅閮ㄥ垎鍔熻兘錛岄泦涓埌浜嗚繖浜涚被搴撻噷緇熶竴瀹炵幇錛岃鍏蜂綋璁捐鍜屽紑鍙戜漢鍛樹互浠g爜閲嶇敤鐨勫艦寮忔潵瀹炵幇COM瑙勮寖錛?/p> <p>褰撶劧浜轟滑涔熸剰璇嗗埌浜咰OM榪欐牱鐨勪竴浜涢棶棰橈紝鐗瑰埆鏄叿浣撳疄鐜版椂璁捐鍜屽紑鍙戜漢鍛樺繀欏昏鍏蟲敞鍑犱箮鎵鏈夌殑浜岃繘鍒剁粏鑺傦紝浜庢槸.net灝辮癁鐢熶簡錛屾妸榪欎簺瑙勮寖鐨勮澶氬鏉傛ч兘灝佽鍦ㄤ簡铏氭嫙鏈洪噷闈紝鎶婅繖浜涚洰鏍囧姛鑳斤紙璺ㄨ竟鐣屻侀忔槑鎬х瓑絳夛級閫氳繃涓鑷磋屽張騫蟲粦鐨勫鉤鍙版帴鍙e拰鑷弿榪扮殑meta data錛屼互涓縐嶈璁捐鍜屽紑鍙戜漢鍛樻洿鏄撴帴鍙楃殑椋庢牸寮鏀句簡鍑烘潵錛?/p> <p>COM鐨勫獎鍝嶆槸闈炲父騫垮ぇ鐨勶紝姣斿XPCOM 錛孎irefox涓婄殑涓縐嶆彃浠舵妧鏈爣鍑嗭紝灝辨槸鏍規嵁COM鐨勬濇兂鍜屽師鍒欏埗瀹氱殑錛涜澶氳瘎璁鴻錛孎irefox鐨勬垚鍔熸槸鍥犱負瀹冩彃浠舵槸濡傛鐨勬垚鍔燂紝榪欎篃綆楁槸COM鏈韓鎵鎰忔枡涓嶅埌鐨勮礎鐚箣涓銆?/p> <p>鍦?net鐨勫鉤鍙頒笂錛屽嵆浣挎槸.net CLR/SSCLI鐨勫叿浣撳疄鐜頒篃澶ч噺榪愮敤浜咰OM鐨勬濇兂鍜屾満鍒訛紝鍙互璇?net灝辨槸鎼緩鍦–OM浜岃繘鍒剁粍浠跺鉤鍙頒箣涓婄殑铏氭嫙鏈烘墭綆″鉤鍙般?/p> <p>鏈鍚庯紝.net寮濮嬫椂鐨勫唴閮ㄧ紪鍙鋒槸COM 2.0</p> <p> </p> <p>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</p> <p>*) 鍏充簬“鍚嶈瘝澶”<br>榪欐槸瑕佸疄鐜板彲浠ヨ法榪涚▼鍜屾満鍣ㄨ竟鐣岋紝璺ㄥ紓鏋勫鉤鍙幫紙褰撶劧蹇呴』瀹炵幇浜咰OM鎵瑙勫畾鐨勫熀紜鏈嶅姟錛夛紝閫忔槑鍖栧叿浣撳璞$被鍨嬪強瀵硅薄鐢熷懡鍛ㄦ湡錛屼究浜庣粺涓閮ㄧ講鍜岀増鏈鐞嗙殑緇勪歡鎶鏈紝鎵蹇呴』浠樺嚭鐨勪唬浠楓?/p> <p>COM瑙勮寖宸叉妸瑕佽揪鑷磋繖浜涚洰鏍囩殑緋葷粺錛屾墍蹇呴』鎻愪緵鐨勬帴鍙e拰鐗規ф娊璞′簡鍑烘潵錛屽彧涓嶈繃涓轟簡琛ㄨ揪榪欎簺鎶借薄鐨勬蹇佃屾柊閫犵殑鏈鍚嶈瘝鏈変簺闄岀敓鍜岀獊鍏錛涘鏋滆閬囧埌鐩鎬技闂鐨勬瘡涓涓璁″拰寮鍙戜漢鍛橀兘鑷繁鏉ュ仛鎶借薄錛屾湭蹇呬細鐢熸垚鏇村ソ鐨勬柟妗堬紱</p> <p>涓句釜渚嬪瓙錛宎partment錛屽闂達紝灝辨槸涓轟簡鎶借薄浼犵粺OS涓繘紼嬪拰綰跨▼鐨勫疄鐜拌屾柊閫犵殑鏈鍚嶈瘝鍜屾蹇碉紱浠諱綍浜鴻鎶借薄榪欐牱鐨勪竴浜涙蹇碉紝涓嶆柊閫犳湳璇紝鏄潪甯稿洶闅劇殑錛屽姣?net錛屽悗鑰呯敤浜咰LR铏氭嫙鏈烘潵灝佽浜嗗ぇ澶氭暟鐨勫疄鐜扮粏鑺傦紝騫剁敤璁╀漢鏇村鏄撴帴鍙楃殑椋庢牸鏉ュ紑鏀炬帴鍙o紝鍙簨瀹炰笂浠嶇劧鏂伴犱簡涓浜涘悕璇嶅拰姒傚康錛屽綾諱技鑼冪暣鐨凙ppDomain錛?/p> <p>*) 鍏充簬“鍩轟簬ATL鐨勫疄鐜版瘮杈冮毦鎳?#8221;<br>ATL涓昏浣跨敤浜唗emplate鎶鏈紝COM鎺ュ彛鏅鴻兘鎸囬拡錛岀敤闈欐佽漿鎹㈡潵妯℃嫙鍔ㄦ佺粦瀹氾紝絳夌瓑錛屽疄闄呭茍涓嶆槸寰堝鏉傦紝鍙兘綆梒++瀹炵幇鏈哄埗鐨勪腑絳夐毦搴︼紝涓昏娑夊強Modern C++ design涓涔︿腑涓浜涚浉鍏寵璁$悊蹇電殑榪愮敤銆傚姣擝oost涓煇浜涘簱鐨勫疄鐜幫紝ATL寰堜漢閬撲簡銆?/p> <p>*) 鍏充簬“榪欏茍涓嶆槸COM鏈韓澶嶆潅錛岃屾槸C++宸茬粡钀藉悗浜庢椂浠d簡”<br>棣栧厛COM鐨勮鑼冪殑紜槸澶嶆潅鐨勶紝涓哄暐錛熺涓鐐瑰凡緇忚浜嗭紝灝辨槸涓轟簡瑕佹娊璞″嚭璺ㄨ竟鐣屽拰瀵硅薄閫忔槑鐨勭粍浠舵妧鏈紱.net琛ㄨ薄涓婄湅姣旇緝“綆鍗曞鏄?#8221;錛岄鏍間翰榪戣璁″拰寮鍙戜漢鍛橈紝瀹為檯涓婂鏉備簨鍔″拰瀹炵幇緇嗚妭閮借鍒掑垎鍒癈LR閭d釜灞傞潰涓婂幓瀹炵幇浜嗭紱鍘葷湅涓涓婥LR鐨勫紑婧愬疄鐜癝SCLI錛屼綘浼氬彂鐜幫紝鏁翠釜铏氭嫙鏈哄鉤鍙扮殑瀹炵幇錛屽ぇ閲忚繍鐢ㄤ簡COM鐨勬濇兂鍜屾満鍒訛紝灝辨槸涓涓法鍨嬬郴緇熷鉤鍙扮駭鐨凜OM server錛?/p> <p>鍏舵錛孋OM瑙勮寖鏈韓鏄嫭绔嬩簬瀹炵幇璇█鐨勶紝鍙鏋勫緩鍑虹殑緇勪歡絎﹀悎瑙勮寖鍒跺畾鐨勪簩榪涘埗鍏煎錛岀郴緇熷氨鍙互榪愪綔錛岃繖鍜孋++鏄惁钀藉悗鏃朵唬娌℃湁鍏崇郴銆傚鏋滃紑鍙戜漢鍛樿涓猴紝.net鎵嶅鍏堣繘錛屼篃瀹屽叏鍙互鐢?net涓殑鎵樼璇█錛屽C#鏉ュ疄鐜癈OM緇勪歡錛?/p> <p>鏈鍚庯紝姣忕璇█閮芥湁鍏墮傜敤鐨勮寖鍥達紝鐜板湪鍙互榪欎箞璇?#8220;濡傛灉鏈変竴涓叏鏂扮殑欏圭洰闇姹傦紝瑕佽揪鑷磋法杈圭晫鍜屽璞¢忔槑緇勪歡錛屽茍涓旀病鏈夊お榪囦弗鑻涚殑鎬ц兘闇姹傦紝閭d箞.net騫沖彴鍙婂叾涓婄殑鎵樼璇█鏉ュ疄鐜幫紝姣旂敤C++鍙婄浉鍏寵緟鍔╃被搴撴潵浠OM緇勪歡褰㈠紡鏉ュ疄鐜幫紝瑕佹洿鍚堥傦紝涔熸洿蹇熶究鎹峰拰鑺傜渷棰勭畻銆?#8221;浣嗘槸錛屽湪榪欎釜鍒ゆ柇涓婃垜浠姞浜嗗緢澶氫弗鏍肩殑綰︽潫錛屼竴鏃﹂渶姹傚彉鏇達紝鐗瑰埆鏄」鐩殑闈炲姛鑳芥ч渶姹傦紝瑕佹眰楂樻ц兘榪愮畻鎴栬呮洿欏虹晠鐨勪笌legacy鐨刵ative緋葷粺鐩鎬簰錛岄偅涔?#8220;浣跨敤native璇█鏉ュ疄鐜版ц兘鍏抽敭浠ュ強legacy浜や簰鍔熻兘錛岄氳繃COM灝佽錛屽啀鐢盋OMInterop浜?net鎵樼搴旂敤璋冪敤”鍙兘鏄洿鐜板疄鐨勬柟妗堛侰++鏄竴闂ㄦ椿鐨勮璦錛屼笉鏂彂灞曠殑璇█錛屽嵆浣垮湪鏈鏂扮殑鎵樼鏃朵唬閲岋紝C#鎴愪負鏍囧噯涓繪祦錛屼絾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>鍏充簬閲戝北緋誨垪杞歡寮婧愪唬鐮佺殑鎬濊?/title><link>http://www.shnenglu.com/flagman/archive/2010/12/13/ThinkingAboutOpenSourceOfKingSoftProjects.html</link><dc:creator>flagman</dc:creator><author>flagman</author><pubDate>Mon, 13 Dec 2010 01:18:00 GMT</pubDate><guid>http://www.shnenglu.com/flagman/archive/2010/12/13/ThinkingAboutOpenSourceOfKingSoftProjects.html</guid><wfw:comment>http://www.shnenglu.com/flagman/comments/136259.html</wfw:comment><comments>http://www.shnenglu.com/flagman/archive/2010/12/13/ThinkingAboutOpenSourceOfKingSoftProjects.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/flagman/comments/commentRss/136259.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/flagman/services/trackbacks/136259.html</trackback:ping><description><![CDATA[<p>閲戝北緋誨垪杞歡涓殑涓閮ㄥ垎浠g爜open source浜嗭紝鑷劧鍦板紩璧風綉緇滀笂浠ュ強IT涓氱晫鐨勪竴鐗囩儹璇勩傚叾涓叧浜庡凡緇忓紑婧愮殑榪欓儴鍒嗗鍥翠唬鐮佺殑浠g爜璐ㄩ噺鐨勯棶棰橈紝鏇存槸鐑腑涔嬬儹錛涗互涓嬫槸鍏充簬榪欎釜闂涓漢鐨勪竴浜涙濊冿細<br><br>浠庢湰璐ㄤ笂璇磋繖閲岄潰灝辨槸涓猼rade off錛屼篃灝辨槸騫寵 鍜屽彇鑸嶇殑闂銆備駭鍝侀」鐩殑棰勭畻鎶曞叆錛岃繘搴﹀帇鍔涳紝鍚勬柟闈漢鍛樼殑鍗忚皟錛岄鏍煎拰涔犳儻鐨勭粺涓錛岀瓑絳夈?/p> <p>璁稿浼樼寮婧愰」鐩紝姣斿Boost錛屽叾涓緢澶氫綔鑰呮湰韜兘鏄鑰呭吋寮鍙戞垨鑰呮槸甯︽湁鐮旂┒鎬ц川鐨勫紑鍙戜漢鍛橈紝鍦ㄩ珮鏍°侀潪鐩堝埄緇勭粐鎴栬呭晢涓氫紒涓氱殑闈炵洿鎺ョ泩鍒╅」鐩殑璧勯噾鏀寔涓嬶紝鍦ㄥ緢灝戣繘搴﹀帇鍔涘拰鍟嗕笟鍘嬪姏鐨勬儏鍐典笅錛岀簿闆曠粏鐞紝澶氭榪唬鍚庯紝鏋勫緩鍑虹殑綺懼搧浠g爜銆傜敤榪欐牱鐨勬爣鍑嗘潵瑕佹眰鎵鏈夌殑杞歡浜у搧錛岀壒鍒槸鍟嗕笟浜у搧錛堝綋鐒墮櫎鍘誨皯鏁板叧緋婚噸澶у拰闀胯繙鐨勫熀紜鏍稿績閮ㄥ垎澶栵級鐨勬瀯寤猴紝鏄笉縐戝鐨勶紝涔熸槸涓嶅悎綆楃殑錛屽洜涓哄強鏃跺崰棰嗗競鍦哄拰瓚沖鐨勭泩鍒╋紝浠ュ強鑾峰緱鐢ㄦ埛鐨勮禐璁告墠鏄晢涓氳蔣浠舵渶閲嶈鐨勭洰鏍囥?/p> <p>鍥炲ご鏉ョ湅閲戝北鐩墠寮婧愮殑榪欎簺浜у搧錛屾瘮濡傝繖閲岃璁虹殑閲戝北鍗+錛屽叾浠庢帹鍑哄氨鏄厤璐圭殑錛屾槸涓轟簡甯傚満涓婄殑鍏堟湡鎺ㄥ嚭鐨勫悓綾誨伐鍏瘋蔣浠跺強鏃舵瘮鎷煎崰棰嗕簺璁哥浉鍏沖競鍦轟喚棰濓紝鍏跺茍涓嶆槸閲戝北鐨勫熀紜鍜屾牳蹇冧駭鍝侊紱浠庤繖浜涘厛澶╃殑鏉′歡鐪嬶紝榪欎釜浜у搧鐨勫晢涓氭姇鍏ヤ笉浼氬緢澶у悓鏃跺張鏈夊揩閫熸帹鍑虹殑瑕佹眰錛岃兘鏈夌洰鍓嶈繖鏍風殑浜у搧璐ㄩ噺錛屾槸鍚堢悊鐨勶紝浠庝紒涓氳搴﹀拰鐢ㄦ埛瑙掑害鐪嬩篃閮芥槸鍙互鎺ュ彈鐨勩?/p> <p>璇村埌榪欓噷錛屽氨鎰熻鏈夊繀瑕佹秹鍙婁竴涓?#8220;閲嶆瀯”錛岃繖涓幇鍦ㄥぇ瀹墮兘寰堥噸瑙嗗悓鏃朵篃緇忓父璋堝強鐨勮瘽棰樸備負浣曞ぇ瀹墮兘寰堥噸瑙嗭紵鑰屼笖甯稿父璋堝強錛熻繖鍏朵腑褰撶劧鏈夎蔣浠舵瀯寤烘湰韜殑鐗圭偣錛屾瘮濡傚闇姹傜悊瑙g殑涓嶆柇娣卞叆鍜岃皟鏁淬佽璁$殑涓嶆柇鏀瑰杽鍜屾紨榪涖佷唬鐮侀鏍肩殑緇熶竴浠ュ強緇嗚妭鐨勫畬鍠勭瓑絳夛紱浣嗘槸錛屾湁涓ぇ瀹跺湪娼滄剰璇嗛噷閮芥劅瑙夊埌錛屽鉤鏃跺嵈寰堝皯璋堝強鐨勭紭鐢?-榪涘害鍜屾垚鏈紝鍥犱負鏈変簡榪欎簺鍘嬪姏錛屼駭鍝佺殑絎竴鐗堝線寰涓嶆槸寰堝畬緹庣殑錛岀劧鍚庡鏋滆繕鍋氬悗緇増鏈殑璇濓紝閭d箞灝辮寮曞叆閲嶆瀯錛涘洜涓烘湁浜嗚繖浜涘帇鍔涳紝鍦ㄧ粡榪囧騫翠箣鍚庯紝濡傛灉榪欎釜浜у搧榪樺瓨鍦ㄧ殑璇濓紝閭d箞灝辮榪涜澶ц妯$殑閲嶆瀯銆傜畝鍗曠殑璇達紝閲嶆瀯涔嬫墍浠ラ噸瑕侊紝涓嶄粎浠呮槸杞歡鏋勫緩鏈韓鐗圭偣鎵寮曞彂錛屼篃鏄晢涓氬帇鍔涗箣涓嬬殑鏋勫緩榪囩▼鐨勬湁鏁堝簲瀵逛箣閬撱?br></p> <img src ="http://www.shnenglu.com/flagman/aggbug/136259.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:18 <a href="http://www.shnenglu.com/flagman/archive/2010/12/13/ThinkingAboutOpenSourceOfKingSoftProjects.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>CLR緋誨垪--鎺㈢儲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>鍏充簬紼嬪簭璁捐璇█鏈韓鐨勮璁℃湁璁稿鏈夎叮鐨勮瘽棰橈紝姣斿錛屼負浣旵++涓殑綾繪垚鍛樺嚱鏁版病鏈夐噰鐢ㄧ被浼糐ava涓殑“鍏ㄨ櫄”璁捐錛?br><br>1) 浠庤璦鏈韓璁捐涓婄湅錛?br>鏁堢巼瀹氱劧鏄痗++褰撳垵璁捐鏃惰冭檻鐨勯噸鐐逛箣涓錛屼婦涓緥瀛愶紝涓轟簡鑺傜渷涓嶅繀瑕佺殑VTable寮閿錛孉TL鐢╰emplate鎶鏈潤鎬佽漿鎹㈡潵妯℃嫙鍔ㄦ佺粦瀹氫互鏀寔COM鐗規х殑瀹炵幇錛涘拰C鐨勫吋瀹癸紝灝盫Table瑙掑害鐪嬶紝闂涓嶅ぇ錛屽洜涓哄悗鑰呭彲浠ョ敤鍑芥暟鎸囬拡鏁扮粍鏉ユā鎷燂紱</p> <p>2) 鍐嶄粠澶у鏁板簲鐢ㄤ腑甯歌鐨勭被緇ф壙浣撶郴涓婄湅錛?br>闄や簡鏁翠釜緇ф壙浣撶郴鎵緇熶竴寮鏀懼嚭鏉ョ殑鎺ュ彛闆嗭紙涔熷氨鏄敱铏氬嚱鏁版墍緇勬垚錛夛紝鍦ㄧ戶鎵夸綋緋葷殑姣忎釜灞傞潰鍙﹀浼氭湁澶ч噺鐨勫叾浠栬緟鍔╂垚鍛樺嚱鏁幫紙鍏舵暟閲忛氬父姣旇櫄鍑芥暟澶氱殑澶氾級錛岃繖浜涙垚鍛樺嚱鏁板畬鍏ㄦ病蹇呰璁捐鎴愯櫄鍑芥暟錛?/p> <p>3) 浠庡叾浠栬璦鐪嬶紝<br>鍗充嬌杈冩柊鐨勮櫄鎷熸満璇█C#(Java綆楁槸杈冭佺殑铏氭嫙鏈鴻璦),鍙嶈屽畾涔変簡姣擟++鏇翠負涓ユ牸鏇翠負鏄懼紡鐨勬垚鍛樻柟娉曞疄鐜版垨瑕嗙洊鎴栭噸杞芥垨鏂板緩鐨勮鍒欙紱榪欐槸闈炲父閲嶈鐨勫C++浠ュ強Java璁捐鎬濇兂鐨勫弽鎬濄?/p> <p>4) 浠庤璦鐨勯傜敤鍦哄悎鐪嬶紝<br>鎴戜滑鐜板湪鐨勮璁猴紝緇濆ぇ澶氭暟鎯呭喌涓嬪甫鏈変竴涓潪甯擱噸瑕佺殑榛樿鍓嶆彁錛岄偅灝辨槸鍦ㄧ敤鎴鋒佹ā寮忎笅浣跨敤C++錛屽鏋滄斁瀹借繖涓害鏉燂紝鍦ㄥ唴鏍告ā寮忎笅浣跨敤C++錛岄偅鎯呭喌鍙堝畬鍏ㄤ笉鍚屼簡銆?br>寮曠敤涓嬮潰榪欎釜鏂囨。鐨勮鐐癸紝<a >http://www.microsoft.com/china/whdc/driver/kernel/KMcode.mspx</a><br>棣栧厛錛岀敤鎴鋒佷笅闈炲父寤変環鍑犱箮涓嶇敤鑰冭檻鐨勮祫婧愶紝鍦ㄥ唴鏍鎬腑鏄潪甯告槀璐電殑錛屾瘮濡傚唴鏍稿爢鏍堜竴鑸氨3涓猵age錛?/p> <p>鍦ㄥ唴鏍鎬笉鑳藉垎欏?paging)鏃跺繀欏諱繚璇佸皢琚墽琛岀殑鎵鏈変唬鐮佸拰鏁版嵁蹇呴』鏈夋晥鐨勯┗鐣欏湪鐗╃悊鍐呭瓨涓紝濡傛灉榪欐椂闇瑕佸椹葷暀鍑犲紶铏氳〃浠ュ強铏氳〃鎸囬拡閭h繕鏄樉寰楅潪甯告槀璐電殑錛屽悓鏃剁紪璇戝櫒涓鴻櫄鍑芥暟錛屾ā鏉跨瓑鐢熸垚浠g爜鐨勬柟寮忥紝璁╁紑鍙戜漢鍛樺緢闅劇‘瀹氳鎵ц涓涓嚱鏁版墍闇瑕佺殑鎵鏈変唬鐮佺殑鎵鍦ㄤ綅緗紝鍥犳涔熸棤娉曠洿鎺ユ帶鍒剁敤浜庡畨緗繖浜涗唬鐮佺殑鑺傦紙涓漢璁や負鍙兘閫氳繃progma segment/datasegment/codesegment瀵逛簬浠g爜鍜屾暟鎹繘琛岄泦涓帶鍒訛級錛屽洜姝ゅ湪闇瑕佽繖浜涗唬鐮佹椂錛屽彲鑳藉凡緇忚page out浜嗭紱</p> <p>鎵鏈夋秹鍙婄被灞傛緇撴瀯錛屾ā鏉匡紝寮傚父絳夌瓑榪欐牱鐨勪竴浜涜璦緇撴瀯鍦ㄥ唴鏍告佷腑閮藉彲鑳芥槸涓嶅畨鍏ㄧ殑錛屾渶濂芥槸鎶婄被鐨勪嬌鐢ㄩ檺瀹氫負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://yw3328.com" target="_blank">欧美激情一区</a>| <a href="http://772ss.com" target="_blank">久久久一区二区三区</a>| <a href="http://erzhuzi.com" target="_blank">欧美日韩国产成人高清视频</a>| <a href="http://ziwufuren.com" target="_blank">99视频在线观看一区三区</a>| <a href="http://baoyu1313.com" target="_blank">亚洲黄色有码视频</a>| <a href="http://zzzz80.com" target="_blank">麻豆91精品</a>| <a href="http://4186a.com" target="_blank">在线视频欧美一区</a>| <a href="http://0070571.com" target="_blank">亚洲欧美久久久久一区二区三区</a>| <a href="http://o10669.com" target="_blank">国产综合网站</a>| <a href="http://lfxhfh.com" target="_blank">亚洲国产三级网</a>| <a href="http://977mo.com" target="_blank">欧美日韩免费观看一区三区</a>| <a href="http://65kf.com" target="_blank">香蕉av777xxx色综合一区</a>| <a href="http://3314133.com" target="_blank">欧美一级在线播放</a>| <a href="http://www8qa.com" target="_blank">亚洲激情综合</a>| <a href="http://zytxkj.com" target="_blank">亚洲香蕉成视频在线观看</a>| <a href="http://yichenep.com" target="_blank">国模精品一区二区三区</a>| <a href="http://lingshidu.com" target="_blank">亚洲成色最大综合在线</a>| <a href="http://82b2.com" target="_blank">国产精品观看</a>| <a href="http://www-82622.com" target="_blank">模特精品裸拍一区</a>| <a href="http://gaobb52.com" target="_blank">欧美系列电影免费观看</a>| <a href="http://132653.com" target="_blank">麻豆成人综合网</a>| <a href="http://81ffff.com" target="_blank">欧美视频中文字幕在线</a>| <a href="http://caoliu2022.com" target="_blank">久久亚洲视频</a>| <a href="http://haohetour.com" target="_blank">欧美日韩精品一区二区在线播放</a>| <a href="http://xp1025.com" target="_blank">久久福利一区</a>| <a href="http://5917t.com" target="_blank">国产乱码精品一区二区三区五月婷</a>| <a href="http://nnnn34.com" target="_blank">一区二区三区我不卡</a>| <a href="http://xuanxuan88.com" target="_blank">亚洲精品美女91</a>| <a href="http://www35211.com" target="_blank">国内精品免费午夜毛片</a>| <a href="http://044925.com" target="_blank">日韩亚洲欧美综合</a>| <a href="http://122332.com" target="_blank">一区二区在线视频</a>| <a href="http://287975.com" target="_blank">在线视频免费在线观看一区二区</a>| <a href="http://72avav.com" target="_blank">精品91在线</a>| <a href="http://yc0989.com" target="_blank">亚洲一级特黄</a>| <a href="http://www-kj8777.com" target="_blank">亚洲卡通欧美制服中文</a>| <a href="http://32tun.com" target="_blank">久久久www免费人成黑人精品 </a>| <a href="http://zzchanke.com" target="_blank">亚洲欧美999</a>| <a href="http://422608.com" target="_blank">最新国产成人在线观看</a>| <a href="http://bbbbyb.com" target="_blank">欧美一区=区</a>| <a href="http://www-222kkk.com" target="_blank">亚洲手机在线</a>| <a href="http://eguge.com" target="_blank">欧美精品午夜</a>| <a href="http://cloakok.com" target="_blank">欧美成人免费全部观看天天性色</a>| <a href="http://322033.com" target="_blank">国产精品丝袜xxxxxxx</a>| <a href="http://saox28.com" target="_blank">91久久久久久久久</a>| <a href="http://b1768.com" target="_blank">在线观看的日韩av</a>| <a href="http://xhs1039.com" target="_blank">午夜精品在线</a>| <a href="http://689558.com" target="_blank">午夜欧美精品</a>| <a href="http://998609.com" target="_blank">欧美性一二三区</a>| <a href="http://411233.com" target="_blank">99精品热视频只有精品10</a>| <a href="http://saomm18.com" target="_blank">亚洲国产视频a</a>| <a href="http://chufengguanye.com" target="_blank">久久精品二区三区</a>| <a href="http://8x29ft.com" target="_blank">久久久av网站</a>| <a href="http://8x29ft.com" target="_blank">国产日韩一区二区三区在线</a>| <a href="http://gx2020.com" target="_blank">在线视频你懂得一区二区三区</a>| <a href="http://dgxinshidai.com" target="_blank">亚洲日本中文字幕</a>| <a href="http://www55avav.com" target="_blank">麻豆精品精品国产自在97香蕉</a>| <a href="http://www9797abc.com" target="_blank">久热精品视频在线观看一区</a>| <a href="http://www13256.com" target="_blank">国产伪娘ts一区</a>| <a href="http://pear9.com" target="_blank">亚洲欧美在线播放</a>| <a href="http://9966k.com" target="_blank">久久久精品网</a>| <a href="http://www-90567.com" target="_blank">国产亚洲人成网站在线观看</a>| <a href="http://3333577.com" target="_blank">亚洲欧美日韩综合aⅴ视频</a>| <a href="http://jav1111.com" target="_blank">亚洲女性裸体视频</a>| <a href="http://yw3329.com" target="_blank">国产精品久久9</a>| <a href="http://305838.com" target="_blank">亚洲一区综合</a>| <a href="http://848585.com" target="_blank">久久大逼视频</a>| <a href="http://710691.com" target="_blank">国产亚洲一区精品</a>| <a href="http://689657.com" target="_blank">久久精品亚洲一区二区</a>| <a href="http://xmzszx.com" target="_blank">久久字幕精品一区</a>| <a href="http://3dprintingferuima.com" target="_blank">一区二区三区在线高清</a>| <a href="http://nn99dd.com" target="_blank">麻豆91精品91久久久的内涵</a>| <a href="http://511caifu.com" target="_blank">亚洲国产99</a>| <a href="http://chenyirong.com" target="_blank">在线亚洲伦理</a>| <a href="http://6673328.com" target="_blank">国产精品一区免费在线观看</a>| <a href="http://xprinter3d.com" target="_blank">亚洲欧美日韩直播</a>| <a href="http://www-888005.com" target="_blank">久久久久se</a>| <a href="http://wwwby6682.com" target="_blank">亚洲高清视频一区二区</a>| <a href="http://www3344cao.com" target="_blank">欧美福利电影在线观看</a>| <a href="http://8x29ft.com" target="_blank">99精品视频免费全部在线</a>| <a href="http://www-5888c.com" target="_blank">亚洲综合色自拍一区</a>| <a href="http://zhijiasd.com" target="_blank">国产欧美日韩视频一区二区三区</a>| <a href="http://qdssqt.com" target="_blank">欧美一区二区三区久久精品</a>| <a href="http://5767j.com" target="_blank">快播亚洲色图</a>| <a href="http://wwwxigua66.com" target="_blank">9国产精品视频</a>| <a href="http://59jf.com" target="_blank">国产色综合天天综合网</a>| <a href="http://xxxyyy168.com" target="_blank">久久久一二三</a>| <a href="http://m10669.com" target="_blank">亚洲免费高清视频</a>| <a href="http://arielteam.com" target="_blank">久久精品国产99精品国产亚洲性色</a>| <a href="http://tjpzgs.com" target="_blank">在线观看视频欧美</a>| <a href="http://wanmajc.com" target="_blank">欧美精品黄色</a>| <a href="http://www24699.com" target="_blank">香港成人在线视频</a>| <a href="http://yiapk.com" target="_blank">亚洲国产欧美在线人成</a>| <a href="http://jj8518.com" target="_blank">午夜精品久久久久久久久久久久久 </a>| <a href="http://123086.com" target="_blank">欧美黄色aa电影</a>| <a href="http://qq6699.com" target="_blank">亚洲精品一二三区</a>| <a href="http://wewe520.com" target="_blank">欧美一区亚洲一区</a>| <a href="http://wxtarena.com" target="_blank">亚洲国产精品悠悠久久琪琪</a>| <a href="http://www-137999.com" target="_blank">欧美日韩中文字幕</a>| <a href="http://1369080.com" target="_blank">欧美在线观看视频在线</a>| <a href="http://099553.com" target="_blank">亚洲精品国产精品久久清纯直播 </a>| <a href="http://555134.com" target="_blank">亚洲黄色成人</a>| <a href="http://heyzo1199.com" target="_blank">国产精品精品视频</a>| <a href="http://4254888.com" target="_blank">久久在线免费观看视频</a>| <a href="http://wwwen41.com" target="_blank">亚洲视频日本</a>| <a href="http://876769.com" target="_blank">欧美激情中文不卡</a>| <a href="http://21bridal.com" target="_blank">欧美一级一区</a>| <a href="http://211186.com" target="_blank">亚洲精品字幕</a>| <a href="http://428368.com" target="_blank">黄色一区二区在线</a>| <a href="http://kaijiepharm.com" target="_blank">欧美日韩岛国</a>| <a href="http://75yyyy.com" target="_blank">狂野欧美激情性xxxx</a>| <a href="http://wwwsenvpu.com" target="_blank">亚洲天堂av图片</a>| <a href="http://18av18.com" target="_blank">亚洲国产91</a>| <a href="http://hcbr365.com" target="_blank">免费不卡中文字幕视频</a>| <a href="http://hhsj31.com" target="_blank">亚欧成人在线</a>| <a href="http://devmashup.com" target="_blank">夜夜夜精品看看</a>| <a href="http://wce-expo.com" target="_blank">亚洲风情在线资源站</a>| <a href="http://zhongrenma.com" target="_blank">国产精品永久</a>| <a href="http://556995.com" target="_blank">欧美日韩视频不卡</a>| <a href="http://17kfe.com" target="_blank">农村妇女精品</a>| <a href="http://855821.com" target="_blank">久久久久国产精品厨房</a>| <a href="http://www-49386.com" target="_blank">午夜精品久久久久影视</a>| <a href="http://wwww76.com" target="_blank">av成人国产</a>| <a href="http://www-e2222.com" target="_blank">亚洲国产一成人久久精品</a>| <a href="http://hkjccc.com" target="_blank">久久久人成影片一区二区三区观看</a>| <a href="http://www78778.com" target="_blank">一区二区久久久久</a>| <a href="http://520844www.com" target="_blank">亚洲精品一区二区三区樱花</a>| <a href="http://www-67499.com" target="_blank">伊人久久亚洲影院</a>| <a href="http://yashikeji.com" target="_blank">国产欧美一区二区视频</a>| <a href="http://xpfuli.com" target="_blank">国产精品高清在线</a>| <a href="http://3333347.com" target="_blank">欧美婷婷久久</a>| <a href="http://318823.com" target="_blank">欧美日韩一区二区在线观看</a>| <a href="http://7555hh.com" target="_blank">欧美成人伊人久久综合网</a>| <a href="http://y08877.com" target="_blank">久久综合色8888</a>| <a href="http://dmzjz.com" target="_blank">久久久久www</a>| <a href="http://557523.com" target="_blank">久久中文在线</a>| <a href="http://jsgf444.com" target="_blank">麻豆成人在线</a>| <a href="http://www-8617.com" target="_blank">麻豆国产精品777777在线</a>| <a href="http://5566kan.com" target="_blank">久久久综合免费视频</a>| <a href="http://000695.com" target="_blank">久久精品国产精品亚洲</a>| <a href="http://sifeksa.com" target="_blank">久久精品一区四区</a>| <a href="http://2016dp5330.com" target="_blank">久久精品一区二区三区四区</a>| <a href="http://f9494.com" target="_blank">久久精品国产亚洲a</a>| <a href="http://heshundadi.com" target="_blank">久久不见久久见免费视频1</a>| <a href="http://www5xzz1.com" target="_blank">性欧美超级视频</a>| <a href="http://223533.com" target="_blank">欧美一区二区三区日韩视频</a>| <a href="http://www-188445.com" target="_blank">国产精品成人一区二区网站软件 </a>| <a href="http://nvpuwo22.com" target="_blank">久久一区二区三区超碰国产精品</a>| <a href="http://tareandshare.com" target="_blank">亚洲欧美日韩国产成人精品影院</a>| <a href="http://67idid.com" target="_blank">亚洲一区二区四区</a>| <a href="http://86808a.com" target="_blank">亚洲天堂久久</a>| <a href="http://iotbzw.com" target="_blank">欧美一级片在线播放</a>| <a href="http://www-3844444.com" target="_blank">午夜精品在线观看</a>| <a href="http://quoviajes.com" target="_blank">久久久久国产精品麻豆ai换脸</a>| <a href="http://yye321.com" target="_blank">久久久噜噜噜久久中文字幕色伊伊 </a>| <a href="http://china-cvct.com" target="_blank">亚洲人精品午夜</a>| <a href="http://haohetour.com" target="_blank">日韩视频国产视频</a>| <a href="http://avhai.com" target="_blank">亚洲一区视频</a>| <a href="http://828121.com" target="_blank">久久av一区二区三区</a>| <a href="http://1588vip.com" target="_blank">久久一二三区</a>| <a href="http://saobitv.com" target="_blank">亚洲三级视频</a>| <a href="http://xhamster0.com" target="_blank">久久久精品999</a>| <a href="http://zhuankee.com" target="_blank">久久精品一本</a>| <a href="http://buyiker.com" target="_blank">欧美黑人在线播放</a>| <a href="http://91mdtv.com" target="_blank">日韩午夜电影</a>| <a href="http://youminwang.com" target="_blank">亚洲欧美日韩视频二区</a>| <a href="http://555888666.com" target="_blank">久久久99免费视频</a>| <a href="http://668527.com" target="_blank">欧美久久电影</a>| <a href="http://2016dp5330.com" target="_blank">国产欧美日韩精品a在线观看</a>| <a href="http://jqnyc.com" target="_blank">在线播放不卡</a>| <a href="http://chinagreetown.com" target="_blank">99视频有精品</a>| <a href="http://5555547.com" target="_blank">久久欧美肥婆一二区</a>| <a href="http://hhhtalk.com" target="_blank">亚洲国产成人久久</a>| <a href="http://8880850.com" target="_blank">亚洲宅男天堂在线观看无病毒</a>| <a href="http://eshop999.com" target="_blank">久久精品人人</a>| <a href="http://by8556.com" target="_blank">欧美视频精品在线</a>| <a href="http://2589999.com" target="_blank">激情久久综合</a>| <a href="http://yw1998.com" target="_blank">亚洲专区在线视频</a>| <a href="http://51shoudian.com" target="_blank">美女视频网站黄色亚洲</a>| <a href="http://roujizz.com" target="_blank">夜夜精品视频</a>| <a href="http://136066.com" target="_blank">久久先锋资源</a>| <a href="http://by71222.com" target="_blank">国产精品天美传媒入口</a>| <a href="http://9585865.com" target="_blank">91久久精品一区二区三区</a>| <a href="http://fc3332.com" target="_blank">午夜亚洲性色福利视频</a>| <a href="http://97aixxxx.com" target="_blank">欧美不卡在线视频</a>| <a href="http://gaobb52.com" target="_blank">亚洲欧美亚洲</a>| <a href="http://057232.com" target="_blank">欧美日韩午夜在线</a>| <a href="http://dmzjz.com" target="_blank">在线成人www免费观看视频</a>| <a href="http://y08877.com" target="_blank">亚洲视频在线观看免费</a>| <a href="http://www4466k.com" target="_blank">免费av成人在线</a>| <a href="http://395493.com" target="_blank">中文精品一区二区三区</a>| <a href="http://filmcameralibrary.com" target="_blank">久久嫩草精品久久久精品</a>| <a href="http://ylsnuha.com" target="_blank">欧美香蕉视频</a>| <a href="http://www5xzz1.com" target="_blank">99riav1国产精品视频</a>| <a href="http://b871.com" target="_blank">麻豆成人在线播放</a>| <a href="http://844985.com" target="_blank">亚洲欧美综合v</a>| <a href="http://zucai168.com" target="_blank">欧美日韩国产精品专区</a>| <a href="http://ckk755.com" target="_blank">亚洲国产高清一区</a>| <a href="http://khc83.com" target="_blank">久久免费高清视频</a>| <a href="http://16355t.com" target="_blank">午夜一级久久</a>| <a href="http://moonshile.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>