锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美视频在线观看免费网址,亚洲嫩草精品久久,午夜一区在线http://www.shnenglu.com/mymsdn/category/3173.htmlMyMSDN璁板綍寮鍙戞柊鐭ラ亾zh-cnWed, 07 Apr 2010 20:07:21 GMTWed, 07 Apr 2010 20:07:21 GMT60[緲昏瘧]楂樻晥浣跨敤auto_ptrhttp://www.shnenglu.com/mymsdn/archive/2010/04/07/Using-auto_ptr-Effectively.htmlvolnetvolnetWed, 07 Apr 2010 11:08:00 GMThttp://www.shnenglu.com/mymsdn/archive/2010/04/07/Using-auto_ptr-Effectively.htmlhttp://www.shnenglu.com/mymsdn/comments/111882.htmlhttp://www.shnenglu.com/mymsdn/archive/2010/04/07/Using-auto_ptr-Effectively.html#Feedback2http://www.shnenglu.com/mymsdn/comments/commentRss/111882.htmlhttp://www.shnenglu.com/mymsdn/services/trackbacks/111882.html鏈枃鏉ヨ嚜C/C++鐢ㄦ埛鏃ュ織錛?7錛?0錛夛紝1999騫?0鏈?/i>  鍘熸枃閾炬帴

澶ч儴鍒嗕漢閮藉惉璇磋繃auto_ptr鎸囬拡錛屼絾鏄茍闈炴墍鏈変漢閮芥瘡澶╀嬌鐢ㄥ畠銆備笉浣跨敤瀹冩槸涓嶆槑鏅虹殑錛堝彲鑰葷殑錛夛紝鍥犱負(fù)auto_ptr鐨勮璁″垵琛鋒槸涓轟簡瑙e喅C++璁捐鍜岀紪鐮佺殑鏅亶闂錛屽皢瀹冪敤濂藉彲浠ュ啓鍑烘洿鍋ュ.鐨勪唬鐮併傛湰鏂囨寚鍑哄浣曟紜嬌鐢╝uto_ptr浠ヤ嬌紼嬪簭鍙樺緱瀹夊叏錛屼互鍙?qiáng)濡備綍閬垮紑鍗遍櫓錛岃屼笉鏄竴鑸嬌鐢╝uto_ptr鐨勬伓涔?fàn)鎵鑷寸殑鍒涘緩闂存瓏鎬у拰闅句互璇婃柇鐨勯棶棰樸?

涓轟粈涔堝畠鏄竴涓滆嚜鍔ㄢ濇寚閽?

auto_ptr鍙槸璁歌澶氬鏅鴻兘鎸囬拡涓殑涓縐嶃傝澶氬晢涓氬簱鎻愪緵璁稿鏇村己澶х殑鏅鴻兘鎸囬拡錛屽彲浠ュ畬鎴愭洿澶氱殑浜嬫儏銆備粠鍙互綆$悊寮曠敤璁℃暟鍒版彁渚涙洿鍏堣繘鐨勪唬鐞嗘湇鍔$瓑銆傚簲璇ユ妸auto_ptr璁や負(fù)鏄櫤鑳芥寚閽堜腑鐨勭鐗笶scort[娉ㄩ噴]錛氫竴涓熀浜庣畝鍗曚笖閫氱敤鐩殑鐨勬櫤鑳芥寚閽堬紝鏃㈡病鏈夊皬鍙戞槑涔熸病鏈変赴瀵岀殑鐗規(guī)畩鐩殑鏇翠笉闇瑕侀珮鎬ц兘錛屼絾鏄兘灝嗚澶氭櫘閫氱殑浜嬫儏鍋氬ソ錛屽茍涓旇兘澶熼傚悎鏃ュ父浣跨敤鐨勬櫤鑳芥寚閽堛?

auto_ptr鍋氳繖鏍蜂竴浠朵簨錛氭嫢鏈変竴涓姩鎬佸垎閰嶅唴瀛樺璞★紝騫朵笖鍦ㄥ畠涓嶅啀闇瑕佺殑鏃跺欏飽琛岃嚜鍔ㄦ竻鐞嗙殑鑱岃矗銆傝繖閲屾湁涓病鏈変嬌鐢╝uto_ptr鎸囬拡鐨勪笉瀹夊叏鐨勪緥瀛愶細(xì)

    // Example 1(a): Original code
    //
    void f()
    {
      T* pt( new T );

      /*...more code...*/

      delete pt;
    }

鎴戜滑姣忓ぉ閮藉儚榪欐牱鍐欎唬鐮侊紝濡傛灉f()鍙槸涓涓笁琛岀▼搴忥紝涔熸病鍋氫粈涔堝浣欑殑浜嬫儏錛岃繖鏍峰仛褰撶劧鍙互寰堝ソ宸ヤ綔銆備絾鏄鏋渇()娌℃湁鎵цdelete璇彞錛屾瘮濡傜▼搴忔彁鍓嶈繑鍥烇紙return錛変簡錛屾垨鑰呭湪鎵ц鐨勬椂鍊欐姏鍑哄紓甯鎬簡錛岀劧鍚庡氨瀵艱嚧宸茬粡鍒嗛厤鐨勫璞℃病鏈夎鍒犻櫎錛屽洜姝ゆ垜浠氨鏈変簡涓涓粡鍏哥殑鍐呭瓨娉勬紡銆?

涓涓嬌Example錛?錛夊畨鍏ㄧ殑鍔炴硶鏄敤涓涓滄櫤鑳解濈殑鎸囬拡鎷ユ湁榪欎釜鎸囬拡錛屽綋閿姣佺殑鏃跺欙紝鍒犻櫎閭d釜琚寚鐨勮嚜鍔ㄥ垎閰嶇殑瀵硅薄銆傚洜涓鴻繖涓櫤鑳芥寚閽堣綆鍗曞湴鐢ㄤ負(fù)鑷姩瀵硅薄錛堣繖灝辨槸錛屽綋瀹冪寮瀹冪殑浣滅敤鍩熺殑鏃跺欒嚜鍔ㄩ攢姣佸璞★級錛屾墍浠ュ畠琚О浣溾滆嚜鍔ㄢ濇寚閽堛?

    // Example 1(b): Safe code, with auto_ptr
    //
    void f()
    {
      auto_ptr<T> pt( new T );

      /*...more code...*/

    } // cool: pt's destructor is called as it goes out
      // of scope, and the object is deleted automatically

鐜板湪榪欐浠g爜灝嗕笉浼?xì)鍐峊瀵硅薄涓婂彂鐢熸硠婕忎簡錛屼笉蹇呭湪鎰忚繖涓柟娉曟槸姝e父閫鍑鴻繕鏄紓甯擱鍑猴紝鍥犱負(fù)pt鐨勬瀽鏋勫嚱鏁板皢鎬繪槸鍦ㄥ爢鏍堝脊鍑虹殑鏃跺欒璋冪敤銆傛竻鐞嗗伐浣滃皢鑷姩榪涜銆?/p>

鏈鍚庯紝浣跨敤auto_ptr鍜屼嬌鐢ㄥ唴寤烘寚閽堜竴鏍峰湴瀹規(guī)槗錛屽鏋滆鈥滄敹鍥炩濊祫婧愬茍涓斿啀嬈℃墜鍔ㄧ鐞嗙殑璇濓紝鎴戜滑鍙互璋冪敤release()錛?/p>

    // Example 2: Using an auto_ptr
    //
    void g()
    {
      T* pt1 = new T;
      // right now, we own the allocated object

      // pass ownership to an auto_ptr
      auto_ptr<T> pt2( pt1 );

      // use the auto_ptr the same way
      // we'd use a simple pointer
      *pt2 = 12;       // same as "*pt1 = 12;"
      pt2->SomeFunc(); // same as "pt1->SomeFunc();"

      // use get() to see the pointer value
      assert( pt1 == pt2.get() );

      // use release() to take back ownership
      T* pt3 = pt2.release();

      // delete the object ourselves, since now
      // no auto_ptr owns it any more
      delete pt3;

    } // pt2 doesn't own any pointer, and so won't
      // try to delete it... OK, no double delete

鏈鍚庯紝鎴戜滑鍙互浣跨敤auto_ptr鐨剅eset()鏂規(guī)硶灝哸uto_ptr閲嶇疆鍚戝彟涓涓璞°傚鏋渁uto_ptr宸茬粡鑾峰緱涓涓璞★紝榪欎釜榪囩▼灝卞儚鏄畠鍏堝垹闄ゅ凡緇忔嫢鏈夌殑瀵硅薄錛屽洜姝よ皟鐢╮eset()錛屽氨鍍忔槸鍏堥攢姣佷簡auto_ptr錛岀劧鍚庨噸寤轟簡涓涓柊鐨勫茍鎷ユ湁璇ユ柊瀵硅薄錛?

    // Example 3: Using reset()
    //
    void h()
    {
      auto_ptr<T> pt( new T(1) );

      pt.reset( new T(2) );
        // deletes the first T that was
        // allocated with "new T(1)"

    } // finally, pt goes out of scope and
      // the second T is also deleted

鍖呰鎸囬拡鏁版嵁鎴愬憳

鍚屾牱錛宎uto_ptr涔熷彲浠ヨ鐢ㄤ簬瀹夊叏鍦板寘瑁呮寚閽堟暟鎹垚鍛樸傝冭檻涓嬮潰浣跨敤Pimpl idiom錛堟垨鑰咃紝緙栬瘧鍣ㄩ槻鐏錛夌殑渚嬪瓙錛?sup>[1]

    // Example 4(a): A typical Pimpl
    //

    // file c.h
    //
    class C
    {
    public:
      C();
      ~C();
      /*...*/
    private:
      class CImpl; // forward declaration
      CImpl* pimpl_;
    };

    // file c.cpp
    //
    class C::CImpl { /*...*/ };

    C::C() : pimpl_( new CImpl ) { }
    C::~C() { delete pimpl_; }

綆鍗曞湴璇達(dá)紝灝辨槸C鐨勭鏈夌粏鑺傝瀹炵幇涓轟竴涓崟鐙殑瀵硅薄錛岃棌鍖夸簬涓涓寚閽堜箣涓傝鎬濊礬瑕佹眰C鐨勬瀯閫犲嚱鏁拌礋璐d負(fù)闅愯棌鍦ㄧ被鍐呴儴鐨勮緟鍔┾淧impl鈥濆璞″垎閰嶅唴瀛橈紝騫朵笖C鐨勬瀽鏋勫嚱鏁拌礋璐i攢姣佸畠銆備嬌鐢╝uto_ptr錛屾垜浠細(xì)鍙戠幇榪欓潪甯稿鏄擄細(xì)

    // Example 4(b): A safer Pimpl, using auto_ptr
    //

    // file c.h
    //
    class C
    {
    public:
      C();
      /*...*/
    private:
      class CImpl; // forward declaration
      auto_ptr<CImpl> pimpl_;
    };

    // file c.cpp
    //
    class C::CImpl { /*...*/ };

    C::C() : pimpl_( new CImpl ) { }

鐜板湪錛屾瀽鏋勫嚱鏁頒笉闇瑕佹媴蹇冨垹闄impl_鎸囬拡浜嗭紝鍥犱負(fù)auto_ptr灝嗚嚜鍔ㄥ鐞嗗畠銆備簨瀹炰笂錛屽鏋滄病鏈夊叾瀹冮渶瑕佹樉寮忓啓鏋愭瀯鍑芥暟鐨勫師鍥狅紝鎴戜滑瀹屽叏涓嶉渶瑕佽嚜瀹氫箟鏋愭瀯鍑芥暟銆傛樉鐒訛紝榪欐瘮鎵嬪姩綆$悊鎸囬拡瑕佸鏄撳緱澶氾紝騫朵笖灝嗗璞℃墍鏈夋潈鍖呭惈榪涘璞℃槸涓涓笉閿欑殑涔?fàn)鎯Q岃繖姝f槸auto_ptr鎵鎿呴暱鐨勩傛垜浠皢鍦ㄦ渶鍚庡啀嬈″洖欏捐繖涓緥瀛愩?

鎵鏈夋潈錛屾簮錛屼互鍙?qiáng)璋冪敤鑰?Sinks)

瀹冩湰韜緢婕備寒錛屽茍涓斿仛寰楅潪甯稿ソ錛氫粠鍑芥暟浼犲叆鎴栦紶鍑?span style="font-family: 'Courier New'" class="Code">auto_ptrs錛屾槸闈炲父鏈夌敤鐨勶紝姣斿鍑芥暟鐨勫弬鏁版垨鑰呰繑鍥炲箋?/p>

璁╂垜浠湅鐪嬩負(fù)浠涔堬紝棣栧厛鎴戜滑鑰冭檻褰撴嫹璐漚uto_ptr鐨勬椂鍊欎細(xì)鍙戠敓浠涔堬細(xì)涓涓猘uto_ptr鑾峰緱涓涓嫢鏈夋寚閽堢殑瀵硅薄錛屽茍涓斿湪鍚屼竴鏃墮棿鍙厑璁告湁涓涓猘uto_ptr鍙互鎷ユ湁榪欎釜瀵硅薄銆傚綋浣犳嫹璐濅竴涓猘uto_ptr鐨勬椂鍊欙紝浣犺嚜鍔ㄥ皢婧恆uto_ptr鐨勬墍鏈夋潈錛屼紶閫掔粰鐩爣auto_ptr錛涘鏋滅洰鏍嘺uto_ptr宸茬粡鎷ユ湁浜嗕竴涓璞★紝榪欎釜瀵硅薄灝嗗厛琚噴鏀俱傚湪鎷瘋礉瀹屼箣鍚庯紝鍙湁鐩爣auto_ptr鎷ユ湁鎸囬拡錛屽茍涓旇礋璐e湪鍚堥傜殑鏃墮棿閿姣佸畠錛岃屾簮灝嗚璁劇疆涓虹┖錛坣ull錛夛紝騫朵笖涓嶈兘鍐嶈褰撲綔鍘熸湁鎸囬拡鐨勪唬琛ㄦ潵浣跨敤銆?

渚嬪錛?/p>

    // Example 5: Transferring ownership from
    //            one auto_ptr to another
    //
    void f()
    {
      auto_ptr<T> pt1( new T );
      auto_ptr<T> pt2;

      pt1->DoSomething(); // OK

      pt2 = pt1;  // now pt2 owns the pointer,
                  // and pt1 does not

      pt2->DoSomething(); // OK

    } // as we go out of scope, pt2's destructor
      // deletes the pointer, but pt1's does nothing

浣嗘槸瑕侀伩鍏嶉櫡闃卞啀嬈′嬌鐢ㄥ凡緇忓け鍘繪墍鏈夋潈鐨刟uto_ptr錛?

    // Example 6: Never try to do work through
    //            a non-owning auto_ptr
    //
    void f()
    {
      auto_ptr<T> pt1( new T );
      auto_ptr<T> pt2;

      pt2 = pt1;  // now pt2 owns the pointer, and
                  // pt1 does not

      pt1->DoSomething();
                  // error! following a null pointer
    }

璋ㄨ浜庡績錛屾垜浠幇鍦ㄧ湅鐪媋uto_ptr濡備綍鍦ㄦ簮鍜岃皟鐢ㄨ呬箣闂村伐浣溿傗滄簮鈥濊繖閲屾槸鎸囦竴涓嚱鏁幫紝鎴栬呭叾瀹冨垱寤轟竴涓柊璧勬簮鐨勬搷浣滐紝騫朵笖閫氬父灝嗙Щ浜ゅ嚭璧勬簮鐨勬墍鏈夋潈銆備竴涓滆皟鐢ㄨ呪濆嚱鏁板弽杞繖涓叧緋伙紝涔熷氨鏄幏寰楀凡緇忓瓨鍦ㄥ璞$殑鎵鏈夋潈錛堝茍涓旈氬父榪樿礋璐i噴鏀懼畠錛夈傝屼笉鏄湁涓涓簮鍜岃皟鐢ㄨ咃紝榪斿洖騫朵笖鍒╃敤涓涓澶存寚閽堬紙璇戣呮敞錛氳屼笉鏄嬌鐢ㄤ竴涓眬閮ㄥ彉閲忔潵浼犻掕繖涓寚閽堬級錛岃櫧鐒訛紝閫氳繃涓涓澶存寚閽堟潵鑾峰緱涓涓祫婧愰氬父寰堝ソ錛?

    // Example 7: Sources and sinks
    //

    // A creator function that builds a new
    // resource and then hands off ownership.
    //
    auto_ptr<T> Source()
    {
      return auto_ptr<T>( new T );
    }

    // A disposal function that takes ownership
    // of an existing resource and frees it.
    //
    void Sink( auto_ptr<T> pt )
    {
    }

    // Sample code to exercise the above:
    auto_ptr<T> pt( Source() ); // takes ownership

娉ㄦ剰涓嬮潰鐨勫井濡欑殑鍙樺寲錛?

  1. Source()鍒嗛厤浜嗕竴涓柊瀵硅薄騫朵笖浠ヤ竴涓畬鏁村畨鍏ㄧ殑鏂瑰紡灝嗗畠榪斿洖緇欒皟鐢ㄨ咃紝騫惰璋冪敤鑰呮垚涓烘寚閽堢殑鎷ユ湁鐫銆傚嵆浣胯皟鐢ㄨ呭拷鐣ヤ簡榪斿洖鍊鹼紙鏄劇劧錛屽鏋滆皟鐢ㄨ呭拷鐣ヤ簡榪斿洖鍊鹼紝浣犲簲璇ヤ粠鏉ユ病鏈夊啓榪囦唬鐮佹潵鍒犻櫎榪欎釜瀵硅薄錛屽鍚э紵錛夛紝鍒嗛厤鐨勫璞′篃灝嗚鑷姩瀹夊叏鍦板垹闄ゃ?/p>

    鍦ㄦ湰鏂囩殑鏈鍚庯紝鎴戝皢婕旂ず榪斿洖涓涓猘uto_ptr鏄竴涓ソ涔?fàn)鎯傝榪斿洖鍊煎寘瑁硅繘涓浜涗笢瑗挎瘮濡俛uto_ptr閫氬父鏄嬌寰楀嚱鏁板彉寰楀己鍋ョ殑鏈夋晥鏂瑰紡銆?

  2. Sink()閫氳繃浼犲肩殑鏂瑰紡鑾峰緱瀵硅薄鎵鏈夋潈銆傚綋鎵ц瀹孲ink()鐨勬椂鍊欙紝褰撶寮浣滅敤鍩熺殑鏃跺欙紝鍒犻櫎鎿嶄綔灝嗚鎵ц錛堝彧瑕丼ink()娌℃湁灝嗘墍鏈夋潈杞Щ錛夈備笂闈㈡墍鍐欑殑Sink()鍑芥暟瀹為檯涓婂茍娌℃湁瀵瑰弬鏁板仛浠諱綍浜嬫儏錛屽洜姝よ皟鐢ㄢ淪ink(pt);鈥濆氨絳変簬鍐欎簡鈥減t.reset(0);鈥濓紝浣嗘槸澶ч儴鍒嗙殑Sink鍑芥暟閮藉皢鍦ㄩ噴鏀懼畠涔嬪墠鍋氫竴浜涘伐浣溿?

涓嶅彲浠ュ仛鐨勪簨鎯咃紝浠ュ強(qiáng)涓轟粈涔堜笉鑳藉仛

璋ㄨ錛氬崈涓囦笉瑕佷互鎴戜箣鍓嶆病鏈夋彁鍒扮殑鏂瑰紡浣跨敤auto_ptrs銆傛垜宸茬粡鐪嬭榪囧緢澶氱▼搴忓憳璇曠潃鐢ㄥ叾浠栨柟寮忓啓auto_ptrs灝卞儚浠栦滑鍦ㄤ嬌鐢ㄥ叾瀹冨璞′竴鏍楓備絾闂鏄痑uto_ptr騫朵笉鍍忓叾浠栧璞°傝繖閲屾湁浜涘熀鏈師鍒欙紝鎴戝皢鎶婂畠浠彁鍑烘潵浠ュ紩璧蜂綘鐨勬敞鎰忥細(xì)

For auto_ptr, copies are NOT equivalent. 錛堝鍒禷uto_ptr灝嗕笌鍘熸潵鐨勪笉鐩哥瓑錛?

褰撲綘璇曠潃鍦ㄤ竴鑸殑浠g爜涓嬌鐢?span style="font-family: 'Courier New'" class="Code">auto_ptrs鐨勬椂鍊欙紝瀹冨皢鎵ц鎷瘋礉錛屽茍涓旀病鏈変換浣曟彁紺猴紝鎷瘋礉鏄笉鐩哥瓑鐨勶紙緇撴灉錛屽畠紜疄灝辨槸鎷瘋礉錛夈傜湅涓嬮潰榪欐浠g爜錛岃繖鏄垜鍦–++鏂伴椈緇勭粡甯哥湅瑙佺殑錛?

    // Example 8: Danger, Will Robinson!
    //
    vector< auto_ptr<T> > v;

    /* ... */

    sort( v.begin(), v.end() );

鍦ㄦ爣鍑嗗鍣ㄤ腑浣跨敤auto_ptrs鎬繪槸涓嶅畨鍏ㄧ殑銆備竴浜涗漢鍙兘瑕佸憡璇変綘錛屼粬浠殑緙栬瘧鍣ㄦ垨鑰呯被搴撹兘澶熷緢濂藉湴緙栬瘧瀹冧滑錛岃屽彟涓浜涗漢鍒欏憡璇変綘鍦ㄦ煇涓涓祦琛岀殑緙栬瘧鍣ㄧ殑鏂囨。涓湅鍒拌繖涓緥瀛愶紝涓嶈鍚粬浠殑銆?

闂鏄?span style="font-family: 'Courier New'" class="Code">auto_ptr騫朵笉瀹屽叏絎﹀悎涓涓彲浠ユ斁榪涘鍣ㄧ被鍨嬬殑鍓嶆彁錛屽洜涓烘嫹璐?span style="font-family: 'Courier New'" class="Code">auto_ptrs鏄笉絳変環(huán)鐨勩傞鍏堬紝娌℃湁浠諱綍涓滆タ璇存槑錛寁ector涓嶈兘鍐沖畾澧炲姞騫跺埗閫犲嚭鈥滄墿灞曗濈殑鍐呴儴鎷瘋礉銆傚啀嬈★紝褰撲綘璋冪敤涓涓竴鑸嚱鏁扮殑鏃跺欙紝瀹冨彲鑳戒細(xì)鎷瘋礉鍏冪礌錛屽氨鍍弒ort()閭f牱錛屽嚱鏁板繀欏繪湁鑳藉姏鍋囪鎷瘋礉鏄瓑浠風(fēng)殑銆傝嚦灝戜竴涓祦琛岀殑鎺掑簭鎷瘋礉鈥滄牳蹇冣濈殑鍏冪礌錛屽鏋滀綘璇曠潃璁╁畠涓?span style="font-family: 'Courier New'" class="Code">auto_ptrs涓璧峰伐浣滅殑璇濓紝瀹冨皢鎷瘋礉涓浠解滄牳蹇冣濈殑auto_ptr瀵硅薄錛堝洜姝よ漿縐繪墍鏈夋潈騫朵笖灝嗘墍鏈夋潈杞Щ緇欎竴涓復(fù)鏃跺璞★級錛岀劧鍚庡鍏朵綑鐨勫厓绱犱篃閲囧彇鐩稿悓鐨勬柟寮忥紙浠庣幇鏈夋垚鍛樺垱寤烘洿澶氱殑鎷ユ湁鎵鏈夋潈鐨刟uto_ptr錛夛紝褰撴帓搴忓畬鎴愬悗錛屾牳蹇冨厓绱犲皢琚攢姣侊紝騫朵笖浣犲皢閬囧埌涓涓棶棰橈細(xì)榪欑粍搴忓垪閲岃嚦灝戜竴涓猘uto_ptr錛堜篃灝辨槸鍒氭墠琚帀鍖呯殑閭d釜鏍稿績鍏冪礌錛変笉鍐嶆嫢鏈夊璞℃墍鏈夋潈錛岃岄偅涓湡瀹炵殑鎸囬拡宸茬粡闅忕潃涓存椂瀵硅薄鐨勯攢姣佽岃鍒犻櫎浜嗭紒

浜庢槸鏍囧噯濮斿憳浼?xì)鍥為騫跺笇鏈涘仛涓浜涜兘澶熷府鍔╀綘閬垮厤榪欎簺琛屼負(fù)鐨勪簨鎯咃細(xì)鏍囧噯鐨刟uto_ptr琚晠鎰忚璁℃垚褰撲綘甯屾湜鍦ㄤ嬌鐢ㄦ爣鍑嗗鍣ㄧ殑鏃跺欎嬌鐢ㄥ畠鏃舵墦鏂綘錛堟垨鑰咃紝鑷沖皯錛屽湪澶ч儴鍒嗙殑鏍囧噯搴撳疄鐜頒腑鎵撴柇浣狅級銆備負(fù)浜嗚揪鍒拌繖涓洰鐨勶紝鏍囧噯濮斿憳浼?xì)鍒╃敤杩欐牱涓涓妧宸э細(xì)璁?span style="font-family: 'Courier New'" class="Code">auto_ptr's鐨勬嫹璐濇瀯閫犲嚱鏁板拰璧嬪兼搷浣滅鐨勫彸鍊鹼紙rhs錛夋寚鍚戦潪甯擱噺銆傚洜涓烘爣鍑嗗鍣ㄧ殑鍗曞厓绱爄nsert()鍑芥暟錛岄渶瑕佷竴涓父閲忎綔涓哄弬鏁幫紝鍥犳auto_ptrs鍦ㄨ繖閲屽氨涓嶅伐浣滀簡銆傦紙璇戣呮敞錛氬彸鍊間笉鑳借祴鍊肩粰闈炲父閲忥級

浣跨敤const auto_ptr鏄竴涓ソ涔?fàn)鎯?/h3>

灝嗕竴涓猘uto_ptr璁捐鎴?span style="font-family: 'Courier New'" class="Code">const auto_ptrs灝嗕笉鍐嶄涪澶辨墍鏈夋潈錛氭嫹璐濅竴涓猚onst auto_ptr鏄繚娉曠殑錛堣瘧鑰呮敞錛氭病鏈夎繖鏍風(fēng)殑鏋勯犲嚱鏁幫級錛屽疄闄呬笂浣犲彲浠ラ拡瀵瑰畠鍋氱殑鍞竴浜嬫儏灝辨槸閫氳繃operator*()鎴栬卭perator->()瑙e紩鐢ㄥ畠鎴栬呰皟鐢╣et()鏉ヨ幏寰楁墍鍖呭惈鐨勬寚閽堢殑鍊箋傝繖鎰忓懗鐫鎴戜滑鏈変竴涓畝鍗曟槑浜嗙殑椋庢牸鏉ヨ〃杈句竴涓粷涓嶄涪澶辨墍鏈夋潈鐨刟uto_ptr錛?

    // Example 9: The const auto_ptr idiom
    //
    const auto_ptr<T> pt1( new T );
        // making pt1 const guarantees that pt1 can
        // never be copied to another auto_ptr, and
        // so is guaranteed to never lose ownership

    auto_ptr<T> pt2( pt1 ); // illegal
    auto_ptr<T> pt3;
    pt3 = pt1;              // illegal
    pt1.release();          // illegal
    pt1.reset( new T );     // illegal

榪欏氨鏄垜瑕佽鐨刢osnt錛佸洜姝ゅ鏋滅幇鍦ㄤ綘瑕佸悜涓栫晫璇佹槑浣犵殑auto_ptr鏄笉浼?xì)琚敼鍙橋q朵笖灝嗘繪槸鍒犻櫎鍏舵墍鏈夋潈錛屽姞涓奵onst灝辨槸浣犺鍋氱殑銆俢onst auto_ptr椋庢牸鏄湁鐢ㄧ殑錛屼綘蹇呴』灝嗗畠璋ㄨ浜庡績銆?

auto_ptr浠ュ強(qiáng)寮傚父瀹夊叏

鏈鍚庯紝auto_ptr瀵瑰啓鍑哄紓甯稿畨鍏ㄧ殑浠g爜鏈夋椂鍊欓潪甯稿繀瑕侊紝鎬濊冧笅闈㈢殑浠g爜錛?/p>

    // Example 10(a): Exception-safe?
    //
    String f()
    {
      String result;
      result = "some value";
      cout << "some output";
      return result;
    }

璇ュ嚱鏁版湁涓や釜鍙鐨勪綔鐢細(xì)瀹冭緭鍑轟竴浜涘唴瀹癸紝騫朵笖榪斿洖涓涓猄tring銆傚叧浜庡紓甯稿畨鍏ㄧ殑璇︾粏璇存槑瓚呭嚭浜嗘湰鏂囩殑鑼冨洿[2]錛屼絾鏄垜浠兂瑕佸彇寰楃殑鐩爣灝辨槸寮哄紓甯稿畨鍏ㄧ殑淇濋殰錛屽綊緇撲負(fù)紜繚鍑芥暟鐨勫師瀛愭р斺斿鏋滄湁寮傚父錛屾墍鏈夌殑浣滅敤涓璧峰彂鐢熸垨鑰呴兘涓嶅彂鐢熴?

铏界劧鍦ㄤ緥10(a)涓殑浠g爜闈炲父綺懼閥錛岀湅璧鋒潵鐩稿綋鎺ヨ繎浜庡紓甯稿畨鍏ㄧ殑浠g爜錛屼絾浠嶇劧鏈変竴浜涘皬鐨勭憰鐤碉紝灝卞儚涓嬮潰鐨勫鎴蜂唬鐮佹墍紺猴細(xì)

    String theName;
    theName = f();

鍥犱負(fù)緇撴灉閫氳繃鍊艱繑鍥烇紝鍥犳String鐨勬嫹璐濇瀯閫犲嚱鏁板皢琚皟鐢紝鑰屾嫹璐濊祴鍊兼搷浣滅琚皟鐢ㄦ潵灝嗙粨鏋滄嫹璐濆埌theName涓傚鏋滀換浣曚竴涓嫹璐濆け璐ヤ簡錛宖()灝卞畬鎴愪簡鎵鏈夊畠鐨勫伐浣滀互鍙?qiáng)鎵鏈夊畠鐨勪換鍔★紙榪欏緢濂斤級錛屼絾鏄粨鏋滄槸鏃犳硶鎸藉洖鐨勶紙鍝庡摕鎴戠殑濡堝憖錛?

鎴戜滑鍙互鍋氱殑鏇村ソ鍚楋紝鏄惁鍙互閫氳繃閬垮厤鎷瘋礉鏉ラ伩鍏嶈繖涓棶棰橈紵渚嬪錛屾垜浠彲浠?璁╁嚱鏁版湁涓涓潪甯擱噺寮曠敤鍙傛暟騫跺悜涓嬮潰榪欐牱榪斿洖鍊鹼細(xì)

    // Example 10(b): Better?
    //
    void f( String& result )
    {
      cout << "some output";
      result = "some value";
    }

榪欑湅璧鋒潵寰堟錛屼絾瀹為檯涓嶆槸榪欐牱鐨勶紝榪斿洖result鐨勮祴鍊肩殑鍑芥暟鍙畬鎴愪簡涓涓姛鑳斤紝鑰屽皢鍏跺畠浜嬫儏鐣欑粰浜嗘垜浠傚畠浠嶇劧浼?xì)鍑洪敊銆傚洜姝よ繖涓仛娉曚笉鍙彇銆?

瑙e喅榪欎釜闂鐨勪竴涓柟娉曟槸榪斿洖涓涓寚鍚戝姩鎬佸垎閰嶆寚閽堢殑String瀵硅薄錛屼絾鏄渶濂界殑瑙e喅鏂規(guī)鏄鎴戜滑鍋氱殑鏇村錛岃繑鍥炰竴涓寚閽堝寘鍚湪auto_ptr錛?

    // Example 10(c): Correct (finally!)
    //
    auto_ptr<String> f()
    {
      auto_ptr<String> result = new String;
      *result = "some value";
      cout << "some output";
      return result;  // rely on transfer of ownership;
                      // this can't throw
    }

榪欓噷鏄竴涓妧宸э紝褰撴垜浠湁鏁堥殣钘忔墍鏈夌殑宸ヤ綔鏉ユ瀯閫犵浜屼釜鍔熻兘錛堣繑鍥炲鹼級褰撶‘淇濆畠鍙互琚畨鍏ㄨ繑鍥炵粰璋冪敤鑰呭茍涓斿湪絎竴涓姛鑳斤紙鎵撳嵃娑堟伅錛夊畬鎴愮殑鏃跺欐病鏈夋姏鍑烘搷浣溿傛垜浠煡閬撲竴鏃out瀹屾垚錛岃繑鍥炲煎皢鎴愬姛浜ゅ埌璋冪敤鑰呮墜涓紝騫朵笖鏃犺濡備綍閮戒細(xì)姝g‘娓呯悊錛氬鏋滆皟鐢ㄨ呮帴鍙楄繑鍥炲鹼紝璋冪敤鑰呭皢寰楀埌榪欎釜鎷瘋礉鐨刟uto_ptr涓存椂瀵硅薄鐨勬墍鏈夋潈錛涘鏋滆皟鐢ㄨ呮病鏈夋帴鍙楄繑鍥炲鹼紝涔熷氨鏄拷鐣ヨ繑鍥炲鹼紝鍒嗛厤鐨凷tring灝嗗湪涓存椂auto_ptr琚攢姣佺殑鏃跺欒嚜鍔ㄦ竻鐞嗐傝繖縐嶅畨鍏ㄦ墿灞曠殑浠d環(huán)鍛紵灝卞儚鎴戜滑緇忓父瀹炵幇鐨勫己寮傚父瀹夊叏涓鏍鳳紝寮哄畨鍏ㄩ氬父娑堣椾竴浜涙晥鐜囷紙閫氬父姣旇緝?yōu)畯锛夆斺旇繖閲屾寚棰濆鐨勫姩鎬佸唴瀛樺垎閰嶃備絾鏄綋鎴戜滑鍦ㄦ晥鐜囧拰姝g‘鎬т箣闂村仛鍑洪夋嫨鐨勮瘽錛屾垜浠氬父浼?xì)閫夋嫨鍚庤咃紒

璁╂垜浠吇鎴愬湪鏃ュ父宸ヤ綔涓嬌鐢╝uto_ptr鐨勪範(fàn)鎯俛uto_ptr瑙e喅浜嗗父瑙佺殑闂錛屽茍涓旇兘澶熶嬌浣犵殑浠g爜鍙樺緱鏇村畨鍏ㄥ拰鍋ュ.錛岀壒鍒槸瀹冨彲浠ラ槻姝㈠唴瀛樻硠婕忎互鍙?qiáng)纭繚寮哄畨鍏ㄣ傚洜涓哄畠鏄爣鍑嗙殑錛屽洜姝ゅ畠鍦ㄤ笉鍚岀被搴撳拰騫沖彴涔嬮棿鏄彲縐繪鐨勶紝鍥犳鏃犺浣犲湪鍝噷浣跨敤瀹冿紝瀹冮兘灝嗘槸瀵圭殑銆?

鑷磋阿

This article is drawn from material in the new book Exceptional C++: 47 engineering puzzles, programming problems, and exception-safety solutions by Herb Sutter, 漏 2000 Addison Wesley Longman Inc., which contains further detailed treatments of points touched on briefly in this article, including exception safety, the Pimpl (compiler-firewall) Idiom, optimization, const-correctness, namespaces, and other C++ design and programming topics.

娉ㄩ噴

  1. Pimpl椋庢牸鍙互鏈夋晥鍑忓皯欏圭洰鏋勫緩鏃墮棿錛屽洜涓哄畠鍦–縐佹湁閮ㄥ垎鏀瑰彉鐨勬椂鍊欙紝闃繪瀹㈡埛浠g爜寮曡搗騫挎硾鐨勯噸鏂扮紪璇戙傛洿澶氬叧浜嶱impl椋庢牸浠ュ強(qiáng)濡備綍閮ㄧ講緙栬瘧鍣ㄥ錛屽弬鑰冭繖鏈?a href="xc++.htm">Exceptional C++鐨勬潯嬈?6鍒?0銆傦紙Addison-Wesley, 2000錛?

  2. See the article originally published in C++ Report and available on the Effective C++ CD (Scott Meyers, Addison-Wesley, 1999) and Items 8 to 19 in Exceptional C++ (Herb Sutter, Addison-Wesley, 2000).



volnet 2010-04-07 19:08 鍙戣〃璇勮
]]>
[杞琞浠嶤++鐨凴eturn Value Optimization (RVO)鍒癈#鐨剉alue typehttp://www.shnenglu.com/mymsdn/archive/2010/04/06/111777.htmlvolnetvolnetTue, 06 Apr 2010 11:42:00 GMThttp://www.shnenglu.com/mymsdn/archive/2010/04/06/111777.htmlhttp://www.shnenglu.com/mymsdn/comments/111777.htmlhttp://www.shnenglu.com/mymsdn/archive/2010/04/06/111777.html#Feedback0http://www.shnenglu.com/mymsdn/comments/commentRss/111777.htmlhttp://www.shnenglu.com/mymsdn/services/trackbacks/111777.html鍏堢湅涓孌電畝鍗曠殑C++浠g爜錛?
Type get(int I){
    return Type(i);
} 

Type t = get(1); 

榪欓噷錛?鎴戜滑浠嶤++鐨勫熀鏈涔夌湅涓婂幓錛?搴旇鏄疶ype(i) 璋冪敤涓嬈℃嫹璐濇瀯閫犲嚱鏁幫紝 鍦ㄥ爢鏍堜腑鐢熸垚涓涓復(fù)鏃跺璞★紱鐒跺悗錛岀敤璇ュ璞℃瀯閫犺繑鍥炲璞★紱鐒跺悗瀵硅繖涓復(fù)鏃跺璞¤皟鐢ㄦ瀽鏋勫嚱鏁幫紱鍦ㄨ皟鐢ㄨ呮柟錛?鐢ㄨ繑鍥炵殑涓存椂瀵硅薄璋冪敤鎷瘋礉鏋勯犲嚱鏁頒互鍒濆鍖栧璞, 榪斿洖瀵硅薄鐨勬瀽鏋勫嚱鏁板湪榪欎箣鍚庯紝 鍑芥暟榪斿洖涔嬪墠璋冪敤銆?

鎵浠ワ紝 Type t = get(i); 搴旇鏈変笁涓嫹璐濇瀯閫犲嚱鏁板拰涓や釜鏋愭瀯鍑芥暟鐨勮皟鐢?

鍙槸錛?榪樻湁涓縐嶈娉曟槸錛?緙栬瘧鍣ㄥ彲鑳戒細(xì)瀵硅繖涓や釜涓存椂瀵硅薄榪涜浼樺寲錛屾渶緇堢殑浼樺寲緇撴灉浼?xì)鏄彧鏈変竴嬈$殑鏋勯犲嚱鏁般傚洜涓哄緢鏄庢樉鍦板彲浠ョ湅鍒幫紝 榪欓噷鎴戜滑鍏跺疄鍙槸瑕佺敤涓涓暣鏁版瀯閫犱竴涓猅ype瀵硅薄銆?

鍡? 浼間箮寰堟湁閬撶悊錛?

閭d箞錛?鍝竴縐嶈娉曞鍛紵 娌℃湁璋冩煡灝辨病鏈夊彂璦鏉冿紝浜庢槸鏈漢鐢╒C++6.0鍋氫簡瀹為獙銆?鏀句簡浜沜out<<鈥?.鍦ㄦ嫹璐濇瀯閫犲嚱鏁伴噷錛岃瀵熸墦鍗扮殑緇撴灉錛?緇撴灉鍗存槸璺熸垜鐨剆imple, na茂ve鐨勯嫻嬩竴鑷淬備笁涓嫹璐濇瀯閫犲嚱鏁幫紝 涓や釜鏋愭瀯鍑芥暟銆?

鈥滀綘涓急鏅虹紪璇戝櫒錛佽剳琚嬭繘姘翠簡鍚э紵鈥?蹇樹簡緙栬瘧鍣ㄦ病鑴戣浜?鈥滃緢鏄庢樉鍦ㄨ繖涓緥瀛愰噷鎴戠殑涓や釜涓存椂瀵硅薄閮芥病鏈夌敤鐨勫晩錛佲?

浜庢槸錛屼笂緗戯紝 鏌ヨ祫鏂欙紝 google涓涓嬪惂錛?

涓嬮潰鏄垜鏌ュ埌鐨勪竴浜涚粨鏋滐細(xì)

鍏跺疄錛?榪欑瀵瑰間紶閫掔殑浼樺寲鐨勭爺絀訛紝 騫朵笉鍙眬闄愪簬榪斿洖鍊箋傚涓嬮潰榪欎釜渚嬪瓙錛?

void f(T t) { } 
void main(void){ 
    T t1;
    f(t1); 
} 

涔熸湁榪欑鑰冭檻銆?

f(T)鏄寜鍊間紶閫掔殑銆傝涔変笂搴旇鍋氫竴涓鍒訛紝 浣垮緱鍑芥暟鍐呴儴瀵筎鐨勬敼鍙樹笉浼?xì)濯勫搷鍒板師鏉ョ殑t1.

浣嗘槸錛屽洜涓哄湪璋冪敤f(t1)涔嬪悗錛?鎴戜滑娌℃湁鍐嶄嬌鐢╰1(闄や簡涓涓殣鍚殑destructor璋冪敤)錛屾槸鍚﹀彲鑳芥妸澶嶅埗浼樺寲鎺夛紝 鐩存帴浣跨敤t1鍛紵榪欐牱鍙互鑺傜渷鎺変竴涓嫹璐濇瀯閫犲嚱鏁板拰涓涓瀽鏋勫嚱鏁般?

鍙槸錛?涓嶈鏄榪斿洖鍊肩殑浼樺寲錛?榪樻槸瀵逛笂闈㈣繖縐嶅眬閮ㄥ璞$殑浼樺寲錛屽湪1995騫寸殑C++鏂版爣鍑嗚崏妗堝嚭鍙板墠閮芥槸涓烘爣鍑嗘墍涓ユ牸闄愬埗鐨?(铏界劧鏈変簺緙栬瘧鍣ㄥ茍娌℃湁閬佃榪欎釜鏍囧噯錛?榪樻槸鏀寔浜嗚繖縐嶁滀紭鍖栤?

閭d箞錛?榪欏張鏄負(fù)浠涔堝憿錛?

榪欓噷闈㈡秹鍙?qiáng)鍒颁竴涓櫘閬嶇殑瀵箂ide-effect鐨勬媴蹇с?

浠涔堝張鏄痵ide-effect鍛紵

鎵璋搒ide-effect灝辨槸涓涓嚱鏁扮殑璋冪敤涓庡惁鑳藉瀵圭郴緇熺殑鐘舵侀犳垚鍖哄埆銆?

int add(int i, int j){ return i+j; }灝辨槸娌℃湁side-effect鐨勶紝鑰?

void set(int* p, int I, int v){ p[I]=v; }灝辨槸鏈塻ide-effect鐨勩傚洜涓哄畠鏀瑰彉浜嗕竴涓暟緇勫厓绱犵殑鍊鹼紝 鑰岃繖涓暟緇勫厓绱犲湪鍑芥暟澶栨槸鍙鐨勩?

閫氬父鎰忎箟涓婃潵璇達(dá)紝 鎵鏈夌殑浼樺寲搴旇鍦ㄤ笉褰卞搷紼嬪簭鐨勫彲瑙傚療琛屼負(fù)鐨勫熀紜涓婅繘琛岀殑銆傚惁鍒欙紝蹇垯蹇簡錛?緇撴灉鍗村拰鎵鎯寵鐨勫畬鍏ㄤ笉鍚岋紒

鑰孋++鐨勬嫹璐濇瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟鍙堝緢澶氶兘鏄湁side-effect鐨勩傚鏋滄垜浠殑鈥滀紭鍖栤濆幓鎺変簡涓涓湁side-effect鐨勬嫹璐濇瀯閫犲嚱鏁板拰涓涓瀽鏋勫嚱鏁幫紝 榪欎釜鈥滀紭鍖栤濆氨鏈夊彲鑳芥敼鍙樼▼搴忕殑鍙瀵熻涓恒傦紙娉ㄦ剰錛?鎴戣繖閲岃鐨勬槸鈥滃彲鑳解濓紝鍥犱負(fù)鈥滆礋璐熷緱姝b濓紝 涓や釜鏈塻ide-effect鐨勫嚱鏁扮殑璋冪敤錛?鍦ㄤ笉鑰冭檻騫惰榪愯鐨勬儏鍐典笅錛?涔熻鍙嶈屼笉浼?xì)濯勫搷绋嬪簭鐨勫彲瑙傚療琛屼负銆備笉榪囷紝 榪欑濉炵縼澶遍┈鐨勪簨鍎匡紝 緙栬瘧鍣ㄥ氨寰堥毦鍒ゆ柇浜嗭級

鍩轟簬榪欑蹇ц檻, 1995騫翠互鍓嶇殑鏍囧噯錛?鏄庣‘紱佹瀵瑰惈鏈塻ide-effect鐨勬嫹璐濇瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟鐨勪紭鍖栥傚悓鏃訛紝 榪樻湁涓浜涘C++鎵╁厖鐨勬彁璁紝 鑰冭檻璁╃▼搴忓憳鑷繁瀵圭被榪涜鍏佽浼樺寲鐨勫0鏄庛?紼嬪簭鍛樺彲浠ユ槑紜湴鍛婅瘔緙栬瘧鍣細(xì)涓嶉敊錛?鎴戣繖涓嫹璐濇瀯閫犲嚱鏁幫紝 鏋愭瀯鍑芥暟鏄湁side-effect, 浣嗕綘鍒錛?灝界浼樺寲錛?鍑轟簡浜嬫湁鎴戝憿錛?

鍝庯紝 side-effect鐪熸槸涓涓浜哄張鎭ㄥ張鐖辯殑涓滆タ錛佸畠浣跨紪璇戝櫒鐨勪紭鍖栧彉寰楀洶闅撅紱鍔犲ぇ浜嗙▼搴忕淮鎶ゅ拰璋冭瘯鐨勯毦搴︺傚洜姝?functional language 鎶妔ide-effect褰撲綔媧按鐚涘吔涓鏍鳳紝騫茶剢紱佹銆備絾鍚屾椂錛屾垜浠張寰堥毦紱誨紑side-effect. 涓嶈紼嬪簭鍛樹滑鏇翠範(fàn)鎯簬imperative 鐨勭紪紼嬫柟娉? 璞℃暟鎹簱鎿嶄綔錛孖O鎿嶄綔閮藉ぉ鐒跺氨鏄痵ide-effect.

涓嶈繃錛屼釜浜鴻繕鏄涓篊++鏍囧噯瀵光滀紭鍖栤濈殑淇濆畧鎬佸害鏄湁閬撶悊鐨勩傛棤璁哄浣曪紝璁┾滀紭鍖栤濆彲浠ユ綔鍦ㄥ湴鍋峰伔鍦版敼鍙樼▼搴忕殑琛屼負(fù)鎬繪槸璁╀漢鎯寵搗鏉ュ氨涓嶈垝鏈嶇殑銆?

浣嗘槸錛?鐭涚浘鏄绔嬬粺涓鐨勩傦紙鎯沖綋騫翠亢椹垪鍙緱浜嗗叓鍗佸鍒嗗憿錛夈?瀵硅繖縐峚ggressive鐨勨滀紭鍖栤濈殑鍛煎0鏄竴嫻珮榪囦竴嫻?浠tan Lippeman涓洪鐨勪竴灝忔挳欏藉浐鍒嗗瓙瀵規(guī)爣鍑嗙殑棰犺鍜屽拰騫蟲紨鍙樼殑闃磋皨浠庢潵灝辨病鏈夊仠姝㈣繃銆?榪欎笉錛熷湪1996騫寸殑涓涓闆ㄤ氦鍔犵殑澶滄櫄錛?涓涓槾闄╃殑C++鏂版爣鍑嗚崏妗堝嚭鐐変簡銆傚湪榪欎釜鑽夋閲岋紝 鍔犲叆浜嗕竴涓悕涓篟VO (Return Value Optimization) 鐨勬斁瀹藉浼樺寲鐨勯檺鍒訛紝 濡勫浘璧拌祫鏈富涔夐亾璺紝 緇欒祫鏈寮犵洰鐨勬彁妗堛傚叾鍏蜂綋鍐呭灝辨槸璇達(dá)細(xì)鍏佽緙栬瘧鍣ㄥ鍛藉悕榪囩殑灞閮ㄥ璞$殑榪斿洖榪涜浼樺寲錛?鍗充嬌鎷瘋礉鏋勯犲嚱鏁?鏋愭瀯鍑芥暟鏈塻ide-effect涔熷湪鎵涓嶆儨銆傝繖涓彁璁儗鍚庢墍闅愯棌鐨勬濇兂灝辨槸錛氫負(fù)浜嗘彁楂樻晥鐜囷紝 瀹佸彲鍐掓敼鍙樼▼搴忚涓虹殑椋庨櫓銆傚畞瑕佽祫鏈富涔夌殑鑻楋紝 涓嶈紺句細(xì)涓諱箟鐨勮崏浜嗭紒

鎴戞兂錛?榪欐牱鐨勪竴涓姜澶ф伓鏋佺殑鎻愭绔熶細(xì)琚彁浜わ紝搴旇鏄洜涓篊++鐨勫兼嫹璐濈殑璇箟鐨勬晥鐜囧疄鍦ㄥお鈥滃濡堢殑鈥濅簡銆?褰撲綘鍐欎竴涓?Complex operator+(const Complex& c1, const Complex& c2);鐨勬椂鍊欙紝 绔熼渶瑕佽皟鐢ㄥソ鍑犳鎷瘋礉鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟錛佸悓蹇椾滑錛侊紙娌夌棝鍦幫紝 璇噸蹇冮暱鍦幫級紺句細(xì)涓諱箟鐨勭敓浜у叧緋葷殑浼樿秺鎬ф庝箞浣撶幇鍟婏紵

鎺ヤ笅鏉ワ紝 褰撴垜鎯矴oogle C++鏈鏂扮殑鏍囧噯錛?鐪婻VO鏄惁琚渶緇堥噰綰蟲椂錛?鍗翠粈涔堜篃鎵句笉鍒頒簡銆?鍒癆NSI鐨勭綉绔欎笂鍘伙紝 灞呯劧瑕佷粯閽辨墠鑳紻OWNLOAD鏂囨。銆?鈥滆佸瓙鍦ㄥ煄閲屼笅棣嗗瓙閮戒笉浠橀挶錛?down浣犲嚑涓儌鏂囨。榪樿緇欓挶錛燂紒鈥?

鏁呬簨娌℃湁緇撳眬錛?瀹炲湪鏄笉鐖姐?涔熶笉鐭ユ槸涓嶆槸鍥犱負(fù)鏍囧噯榪樻病鏈夋暡瀹氾紝 鎵浠C++6 灝辨病鏈変紭鍖栵紝 榪樻槸VC鏍規(guī)湰灝辨病瀹屽叏閬靛畧鏍囧噯銆?

涓嶈繃錛屾湁涓鐐規(guī)槸鑲畾鐨勩?褰撳啓紼嬪簭鐨勬椂鍊欙紝 鏈濂戒笉瑕佷緷璧栦簬RVO (鏈変漢錛?璞tan Lippeman, 鍙堝彨瀹僋RV浼樺寲)銆?鍥犱負(fù)錛?涓嶈瀵規(guī)爣鍑嗙殑浜夎鏄惁宸茬粡鏈変簡緇撴灉錛?瀹為檯涓婂悇涓紪璇戝櫒鐨勫疄鐜頒粛榪樻槸鍚勮嚜涓烘斂錛?娌℃湁緇熶竴銆?涓涓彨SCOtt Meyers鐨勫浼?蹇樹簡鏄崠浠涔堢殑浜?灝辮錛?濡傛灉浣犵殑紼嬪簭渚濊禆浜嶳VO, 鏈濂藉幓鎺夎繖縐嶄緷璧栥備篃灝辨槸璇達(dá)紝 涓嶇RVO鍒板簳鏍囧噯涓嶆爣鍑嗭紝 浣犺繕鏄笉鑳界敤銆?涓嶄粎涓嶈兘鐢紝 榪樺緱鏃跺埢璀︽儠鐫RVO鍙兘甯︽潵鐨勭▼搴忚涓轟笂鐨勫彉鍖栥?錛堜篃涓嶇煡榪欏府瀹朵紮鐬庡繖浜嗗崐澶╁埌搴曚負(fù)鍟ワ紒錛?

璇村埌榪欓噷錛?鍊掓兂璧蜂簡C#閲屼竴涓洶鎯戜簡鎴戝緢涔呯殑闂銆傝寰楄C#鐨剆pecification鐨勬椂鍊欙紝 闈炲父涓嶈В涓轟粈涔圕#涓嶅厑璁哥粰value type 瀹氫箟鏋愭瀯鍑芥暟銆?

榪欓噷錛?鍏堢畝鐣ヤ粙緇嶄竴涓婥#閲岀殑value type (鍘熷鏁版嵁綾誨瀷錛?struct 綾誨瀷)銆?

鍦–#閲岀殑value_type灝辮薄鏄鹼紝 姘歌繙鍙兘copy, 鍙栧箋傚洜姝わ紝 瀹冩案榪滄槸in-place鐨勩傚鏋滀綘鎶婁竴涓獀alue type鐨勬暟鎹斁鍦ㄤ竴涓璞¢噷錛屽畠鐨勭敓鍛芥湡灝卞拰閭d釜瀵硅薄鐩稿悓錛涘鏋滀綘澹版槑涓涓獀alue type 鐨勫彉閲忓湪鍑芥暟涓紝 瀹冪殑鐢熷懡鏈熷氨鍦╨exical scope閲屻?

{

  The_ValueType value;

}//value 鍒拌繖閲屽氨姝昏彍浜?

鍟婂憖鍛錛?榪欎笉姝f槸鎴戜滑鎬蹇電殑C++鐨剆tack object鍚楋紵

鍦–++閲岋紝Auto_ptr, shared_ptr, 瀹瑰櫒浠紝 涓嶉兘鏄埄鐢ㄦ瀽鏋勫嚱鏁版潵綆$悊璧勬簮鐨勫悧錛?

C#錛孞ava 铏界劧鍒╃敤garbage collection鎶鏈潵鏀墮泦鏃犵敤瀵硅薄錛?浣挎垜浠笉鐢ㄥ啀鎷呭績鍐呭瓨鐨勫洖鏀躲?浣唃arbage collection騫朵笉淇濊瘉鏃犵敤瀵硅薄涓瀹氳鏀墮泦錛?騫朵笉淇濊瘉Dispose()鍑芥暟涓瀹氳璋冪敤錛?鏇翠笉淇濊瘉涓涓璞′粈涔堟椂鍊欒鍥炴敹銆?鎵浠ュ涓浜涢潪鍐呭瓨鐨勮祫婧愶紝 璞℃暟鎹簱榪炴帴錛?緗戠粶榪炴帴錛?鎴戜滑榪樻槸甯屾湜鑳芥湁涓涓被浼間簬smart pointer鐨勪笢瑗挎潵甯垜浠鐞嗗晩銆傦紙try-finally 铏界劧鍙互鐢紝 浣嗗洜涓哄畠褰卞搷鍒發(fā)exical scope, 鏈夋椂鐢ㄨ搗鏉ヤ笉閭d箞鏂逛究錛?

浜庢槸錛?鎴戝C#鐨勫彇娑坴alue type鐨勬瀽鏋勫嚱鏁板厖婊′簡娣卞帤鐨勯樁綰т粐鎭ㄣ?

涓嶈繃錛?鐜板湪鎯蟲潵錛?C#鐨勮繖縐嶈璁′竴瀹氭槸鎯╀簬C++澶辮觸鐨勬暀璁細(xì)

   1. value type 娌℃湁鎷瘋礉鏋勯犲嚱鏁般侰#鍙仛緙虹渷copy, 娌℃湁side-effect
   2. value type 涓嶅噯鏈夋瀽鏋勫嚱鏁般侰#鏈塯arbage collection, 鏋愭瀯鍑芥暟鐨勫敮涓鐢ㄩ斿彧浼?xì)鏄仛涓浜泂ide-effect璞″叧闂暟鎹簱榪炴帴銆?鎵浠ュ彇娑堜簡鏋愭瀯鍑芥暟錛?灝卞彇娑堜簡value type鐨剆ide-effect.
   3. 娌℃湁浜唖ide-effect, 緋葷粺鍙互浠繪剰鍦板仛浼樺寲浜?

瀵逛互涓嬬▼搴忥細(xì)

The_Valuetype get(int I){return The_Valuetype(i);}

The_Valuetype t = get(1);

鍦–#閲屾垜浠彲浠ュ揩涔愬湴璇達(dá)細(xì)鍙皟鐢ㄤ簡涓嬈℃瀯閫犲嚱鏁般?鍐嶆病鏈塻ide-effect鐨勬矙婕狅紝 鍐嶆病鏈夐毦浠ヤ紭鍖栫殑鑽掑師錛?smart pointer鏈涜屽嵈姝ワ紝 鏁堢巼涔嬭姳澶勫寮閬嶃?I have a dream, 鈥︹?/p>

杞澆鑷細(xì)http://gugu99.itpub.net/post/34143/466008



volnet 2010-04-06 19:42 鍙戣〃璇勮
]]>
鍏充簬綰跨▼鍚屾鐨勪竴浜涙葷粨錛堢敤鎴鋒ā寮?鍐呮牳妯″紡錛?/title><link>http://www.shnenglu.com/mymsdn/archive/2009/12/26/about-multithread-sync.html</link><dc:creator>volnet</dc:creator><author>volnet</author><pubDate>Fri, 25 Dec 2009 21:53:00 GMT</pubDate><guid>http://www.shnenglu.com/mymsdn/archive/2009/12/26/about-multithread-sync.html</guid><wfw:comment>http://www.shnenglu.com/mymsdn/comments/104111.html</wfw:comment><comments>http://www.shnenglu.com/mymsdn/archive/2009/12/26/about-multithread-sync.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/mymsdn/comments/commentRss/104111.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mymsdn/services/trackbacks/104111.html</trackback:ping><description><![CDATA[<p><h3>鑷棆閿佸悓姝?/h3><ol><li>涓鑸槸涓轟簡鍐呮牳鎬佷笅鍚勪釜媧鵑仯鍑芥暟涔嬮棿鍋氬悓姝ヤ綔鐢ㄧ殑銆?/li><li>鍘熺悊鏄紙鍗旵PU錛夊皢IRQL浠庤蔣浠朵腑鏂彁鍗囧埌紜歡涓柇銆侾ASSIVE_LEVEL->DISPATCH_LEVEL銆傚洜涓哄湪DISPATCH_LEVEL涓槸涓嶄細(xì)鍑虹幇綰跨▼鍒囨崲鐨勶紙鍙湁楂樼駭鍒兘鎵撴柇浣庣駭鍒紝鑰屼綆綰у埆涓嶈兘鎵撴柇楂樼駭鍒級銆?/li><li>鍥犱負(fù)鍒嗛〉鍐呭瓨灝嗗鑷村鏋滅嚎紼嬪垏鎹㈢殑鏃跺欎細(xì)寮曡搗鍒嗛〉鏁版嵁浜ゆ崲錛屾暟鎹氦鎹㈡槸閫氳繃寮曞彂欏墊晠闅滄潵瀹炵幇鐨勶紝鑰岄〉鏁呴殰鏄笉鍏佽鍑虹幇鍦―ISPATCH_LEVEL涓殑錛屽惁鍒欏皢寮曡搗緋葷粺宕╂簝錛圥ASSIVE_LEVEL鍒欏厑璁革級銆傞┍鍔ㄧ▼搴忕殑StartIO渚嬬▼銆丏PC渚嬬▼銆佷腑鏂湇鍔′緥紼嬮兘榪愯鍦―ISPATCH_LEVEL鎴栬呮洿楂樼殑IRQL銆傚洜姝よ繖浜涗緥紼嬩笉鑳戒嬌鐢ㄥ垎欏靛唴瀛橈紝鍚﹀垯灝嗗鑷寸郴緇熷穿婧冦?/li><li>鑷棆閿佸湪涓嶅悓IRP涔嬮棿鍚屾鐨勬椂鍊欙紝鍒欓渶瑕佹斁鍦―eviceExtension涓紶閫掋?/li></ol></p><p><h3>浜掗攣</h3><ol><li>綾諱技浜巒umber++; //姹囩紪鍚庡皢涓嶆涓鏉¤鍙ワ紝闈炲師瀛愭搷浣渘umber--; //鍚屼笂鍥犱負(fù)璇彞浼?xì)鍙樻垚澶氬彞锛屽湪绾拷E嬪垏鎹㈢殑鏃跺欙紝涓や釜綰跨▼涓嬬殑璇ヤ緥紼嬪皢浼?xì)浜ぞl囧湪涓璧鋒墽琛岋紝瀵艱嚧閿欒銆傚彲浠ワ細(xì)<div id="hvzpftn" class="gc-code">鍏堝姞閿?br />number++;<br />瑙i攣<br />鍐嶅姞閿?br />number--;<br />瑙i攣<br /></div>鏉ュ疄鐜頒袱鍙ヨ瘽鐨勫悓姝ワ紙鎸夋寚瀹氶『搴忔墽琛岋紝鑰屼笉鍙楀埌綰跨▼鍒囨崲鐨勫獎鍝嶏級鍔犻攣瑙i攣鍙互浣跨敤鑷棆閿?/li><li>鍦ㄧ郴緇熶腑鎻愪緵浜咺nterlocked***/ExInterlocked***瀹炵幇</li></ol></p><p><h3>淇″彿鐏悓姝?/h3><ol><li>綰跨▼1鍏抽棴淇″彿鐏紝浠ヨ嚦浜庝嬌鐢╓ait****鐨勬椂鍊欙紝褰撳墠綰跨▼澶勪簬鏆傚仠鐘舵併?/li><li>綰跨▼2鐨勪綔鐢ㄥ氨鏄湪鎵ц緇撴潫鍚庯紝鐐逛寒淇″彿鐏紙澧炲姞璁℃暟鍣級銆傚綋綰跨▼鍒囨崲鍥炴潵鐨勬椂鍊欙紝綰跨▼1灝卞洜涓鴻鏁板櫒涓嶆槸0鑰屼嬌淇″彿鐏浜庢縺媧葷姸鎬侊紝浠庤岀戶緇墽琛岀嚎紼?銆?/li></ol></p><p><h3>浜嬩歡鐨勫悓姝?/h3>錛堜笉鑳介掑綊鑾峰彇浜掓枼浣擄級<ol><li>涓葷嚎紼嬪湪杈呭姪綰跨▼涓婅緗簡浜嬩歡錛屽鏋滀笉浣跨敤Wait**絳夊緟浜嬩歡榪斿洖錛屽垯涓葷嚎紼嬪彲鑳界洿鎺ユ墽琛屽畬姣曚簡錛岃屽鑷磋緟鍔╃嚎紼嬭繕鍦ㄦ墽琛屻?/li><li>浣跨敤Wait****鍙互浣夸富綰跨▼絳夊緟浜嬩歡鎵ц瀹屾垚銆?/li></ol></p><p><h3>浜掓枼浣撳悓姝?/h3>錛堝厑璁?dāng)R掑綊鑾峰彇浜掓枼浣擄紙寰楀埌浜掓枼浣撶殑綰跨▼榪樺彲浠ュ啀嬈¤幏寰楄繖涓簰鏂ヤ綋錛屾垨鑰呰浜掓枼浣撳浜庡凡緇忚幏寰椾簰鏂ヤ綋鐨勭嚎紼嬩笉浜х敓“浜掓枼”鍏崇郴錛夛級<ol><li>鍒涘緩涓涓簰鏂ヤ綋瀵硅薄錛屽皢浜掓枼浣撳璞′紶閫掔粰澶氫釜綰跨▼銆?/li><li>鍦ㄦ瘡涓嚎紼嬫搷浣滅殑姝ラ涓紝璋冪敤Wait*****錛屽鏋滀簰鏂ヤ綋澶勪簬嬋媧伙紙鍐呴儴緇存姢涓涓鏁板櫒錛夛紝鍒欑戶緇墽琛屽悗緇唬鐮侊紝騫跺湪璋冪敤緇撴潫鍚庢仮澶嶄簰鏂ヤ綋Release****錛岃繖鏍峰綋鍒殑綰跨▼璇曞浘浣跨敤浜掓枼浣撳悗闈㈢殑浠g爜鐨勬椂鍊欙紝鍥犱負(fù)浜掓枼浣撶姸鎬佹湭嬋媧伙紝鍒欐棤娉曠戶緇墽琛屼唬鐮併?/li></ol></p><p><h3>蹇熶簰鏂ヤ綋鍚屾</h3><ol><li>涓庝簰鏂ヤ綋鍚屾綾諱技錛屽敮涓鍖哄埆鏄笉鍏佽閫掑綊鑾峰彇浜掓枼浣?/li></ol></p><img src ="http://www.shnenglu.com/mymsdn/aggbug/104111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mymsdn/" target="_blank">volnet</a> 2009-12-26 05:53 <a href="http://www.shnenglu.com/mymsdn/archive/2009/12/26/about-multithread-sync.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>濡備綍緙栬瘧TrueCrypt婧愮爜http://www.shnenglu.com/mymsdn/archive/2009/12/23/how-to-complie-TrueCrypt-63a.htmlvolnetvolnetWed, 23 Dec 2009 15:47:00 GMThttp://www.shnenglu.com/mymsdn/archive/2009/12/23/how-to-complie-TrueCrypt-63a.htmlhttp://www.shnenglu.com/mymsdn/comments/103863.htmlhttp://www.shnenglu.com/mymsdn/archive/2009/12/23/how-to-complie-TrueCrypt-63a.html#Feedback7http://www.shnenglu.com/mymsdn/comments/commentRss/103863.htmlhttp://www.shnenglu.com/mymsdn/services/trackbacks/103863.html鐩稿叧閰嶇疆
       
  • Intel x86 Core 2 Duo
  •    
  • Windows 7 Ultimate x86 version
  •    
  • Windows Driver Develop Kit 7600.16385.0
  •    
  • TrueCrypt 6.3a Source.zip
  •    
  • Microsoft Visual Studio 2008 SP1 (VC++ 2008)
  •    
  • Microsoft Visual Studio VC++ 1.52
  •    
  • NASM version 2.07 compiled on Jul 19 2009
  •    
  • gzip 1.2.4 Win32 (02 Dec 97)
  •    
  • ......

閰嶇疆TrueCrypt

  1. 涓嬭澆MSVC++ 1.52錛屽畨瑁呭湪C鐩樹笅錛欳:\MSVC
  2. 涓嬭澆NASM錛屼篃瀹夎鍦–鐩樹笅錛欳:\NASM
    http://www.nasm.us/pub/nasm/releasebuilds/2.07/win32/
  3. 涓嬭澆GZIP錛屼篃瀹夎鍦–鐩樹笅錛欳:\gzip
  4. 涓嬭澆騫跺畨瑁匴INDDK錛宧ttp://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx
    鎴戝皢瀹冧滑瀹夎鍦―鐩橈紝璺緞錛欴:\WinDDK
  5. 璁劇疆緋葷粺鍙橀噺錛堬紙WIN7錛夋帶鍒墮潰鏉縗鎵鏈夋帶鍒墮潰鏉塊」\緋葷粺\楂樼駭緋葷粺璁劇疆\鐜鍙橀噺錛夛細(xì)緋葷粺鍙橀噺涓紝鏂板錛?br />鍙橀噺1錛歁SVC16_ROOT    鍊鹼細(xì)C:\MSVC
    鍙橀噺2錛歐INDDK_ROOT    鍊鹼細(xì)D:\WinDDK\7600.16385.0
    鍏朵腑7600.16385.0涓篧inDDK鐨勭浜岀駭鐩綍鍚嶏紝鍚屾椂涔熸槸鐗堟湰鍙鳳紝7600鏄疻indows7鐨勫彂琛岀増鏈彿銆?br />鍙屽嚮鍙橀噺錛歅ATH錛屽湪鍏跺肩殑鏈熬琛ヤ笂錛欳:\NASM;C:\gzip
    鐩殑鏄負(fù)浜嗚鎴戜滑鍙互鐩存帴鍦ㄥ懡浠よ瀹炵敤nasm浠ュ強(qiáng)gzip浣滀負(fù)鍛戒護(hù)琛屻?br />
  6. 涓嬭澆PKCS11錛屼笁涓枃浠訛紝鍙抽敭鍙﹀瓨涓哄嵆鍙?br />http://svn.openvpn.net/projects/openvpn/test/time/openvpn/pkcs11-headers/
    灝嗕笁涓枃浠訛紙pkcs11.h銆乸kcs11f.h銆乸kcs11t.h錛夋嫹璐濆埌婧愮爜涓嬬殑Common鏂囦歡澶逛笅錛屾垜鐨勬簮鐮佹斁鍦―鐩樻牴鐩綍錛屼笁涓簮鐮佹垜灝辨斁鍦?#8220;D:\TrueCrypt\Common”鏂囦歡澶逛腑銆?br />
  7. 緙栬瘧錛屼細(xì)鍙戠幇鏈変袱涓敊璇?br />CKR_NEW_PIN_MODE鍜孋KR_NEXT_OTP鏈畾涔夛紝琛ュ厖瀹氫箟涓涓嬪嵆鍙?br />鍦╠:\TrueCrypt\Common\pkcs11t.h鏂囦歡閲岋紙璇鋒牴鎹?zhèn)ㄨ嚜宸辩殑璧\寰勮繘琛屽鍒訛級
    榪欓噷灝嗗畠浠緗負(fù)錛?br />
    #define CKR_NEW_PIN_MODE      0x000001B0
    #define CKR_NEXT_OTP          0x000001B1
    鎴戠殑鏂規(guī)硶鏄壘鍒板疄鐢ㄥ畠鐨勮鍙ラ檮榪戠殑鍚岀被璇彞錛屾壘鍒扮浉鍚岀殑瀹氫箟錛屽湪鍏朵笅鏂規(guī)坊鍔犮?br />姣斿錛?br />
                TC_TOKEN_ERR (CKR_MUTEX_NOT_LOCKED)
                TC_TOKEN_ERR (CKR_NEW_PIN_MODE)
                TC_TOKEN_ERR (CKR_NEXT_OTP)
    榪欎笁鍙ヨ瘽鏀懼湪涓璧鳳紝鍚庝袱鍙ユ湁闂錛屼絾絎竴鍙ユ甯革紝鍒欐煡鎵綜KR_MUTEX_NOT_LOCKED鐨勫瓨鏀句綅緗紝鍦ㄥ叾涓嬫柟娣誨姞濡備笂涓ゅ彞錛屽叾涓畾涔夌殑鍊煎弬鑰?br />http://www.cryptsoft.com/pkcs11doc/STANDARD/include/v220/otp-pkcs11.h錛岃繖閲岀殑鍊煎彧涓嶈繃鏄竴縐嶉敊璇爜錛屽彧瑕佸畠涓嶉噸澶嶏紝灝卞彲浠ヤ簡銆?br />
  8. 鍐嶇紪璇戯紝鍙兘浼?xì)閬囧堫C竴浜涜鍛婏細(xì)
    1. nasm.exe姝e湪鍋滄錛岃屽洜涓烘病鏈夋紜墽琛岋紝鍙堝鑷?#8220;fatal error LNK1136: invalid or corrupt file”閿欒銆?br />閬囧埌榪欎釜鍙兘鏄洜涓轟綘鐨刵asm姝e湪璇曞浘緙栬瘧ase_amdX64.asm鏂囦歡錛岃宯asm瀵?4浣嶇殑asm緙栬瘧瀵逛綘鍙兘鎰忎箟涓嶅ぇ錛岃搗鐮佸鎴戣岃█鏄繖鏍風(fēng)殑錛屼簬鏄紝鎴戝氨灝嗗畠杞垚緙栬瘧x86浣撶郴鏋舵瀯鐨勶紝涔熻鏄洜涓哄弬鏁伴厤緗殑闂錛屼綘鍙互灝濊瘯鍒殑鏂規(guī)錛屽鏋滄湁鏇村ソ鐨勮瘽錛岃鍛婅瘔鎴戙?br />榪欓噷鎴戞悳绱細(xì)x64銆乤sm絳夊叧閿瓧錛屼慨鏀筪:\TrueCrypt\Crypto\Makefile.inc鏂囦歡涓轟笅闈㈣繖鏍峰嵆鍙細(xì)
      琛?    !if "$(TC_ARCH)" == "x86"
      琛?    TC_OBJ_FORMAT = win32
      琛?    !else
      琛?    #TC_OBJ_FORMAT = win64
      琛?    #edit by gocool, if the x64 system need the nasm.exe use the x64 format parameters for executing.
      琛?    #abort the x64 system here for building.
      琛?    #2009/12/23
      琛?    TC_OBJ_FORMAT = win32
      琛?    TC_ARCH = x86
      琛?0    !endif
      琛?1   
      琛?2    "$(OBJ_PATH)\$(O)\Aes_$(TC_ARCH).obj": Aes_$(TC_ARCH).asm
      琛?3        nasm.exe -Xvc -f $(TC_OBJ_FORMAT) -Ox -D DLL_EXPORT -o "$@" -l "$(OBJ_PATH)\$(O)\Aes_$(TC_ARCH).lst" Aes_$(TC_ARCH).asm
      鍏朵腑錛屼負(fù)浜嗗噺灝戝彉鍖栭噺錛屼篃鍒╀簬浠ュ悗鎭㈠錛岀4-7琛屼負(fù)娉ㄩ噴錛岀8銆?琛屾垜灝嗛潪x86鐨勬儏鍐典篃瀹氫箟鎴恱86鐨勬儏鍐碉紝榪欐牱鏃犺濡備綍涓嬮潰絎?3琛岀殑璇彞閮藉皢鎵ц浠86浣撶郴涓虹粨鏋勭殑璁劇疆錛岃岃繖鏍風(fēng)殑璁劇疆閫氬父鏄紜殑銆?br />
    2. fatal error LNK1000: Internal error during IncrBuildImage
      鎹鏄疢icrosoft Visual Studio 2008鐨勪竴涓狟UG銆俬ttp://blog.csdn.net/just_one_two/archive/2009/10/05/4634391.aspx
      鍚鏈変袱縐嶆柟娉曪紝涓縐嶆槸鏂規(guī)硶1錛岄渶瑕佷笅杞借ˉ涓侊紝鎴戞病鏈夊皾璇曘傜浜岀閫氳繃淇敼閰嶇疆鐨勬柟娉曟垜鎴愬姛浜嗭紝姝ラ濡備笅錛?br />鏂規(guī)硶錛氶」鐩?>灞炴?>閾炬帴鍣?>甯歌   涓嬮潰鐨?#8220;鍚敤澧為噺閾炬帴”錛屽皢“鏄?/INCREMENTAL)”鏀逛負(fù)“鍚?/INCREMENTAL:NO)”銆?br />涓嶈繃榪欏張寮曞叆浜嗗彟澶栦竴涓鍛婏細(xì)3>FormatCom.obj : warning LNK4075: 蹇界暐“/EDITANDCONTINUE”(鐢變簬“/INCREMENTAL:NO”瑙勮寖)
      閫夋嫨欏圭洰,灞炴?>閰嶇疆灞炴?>C/C++錛屼慨鏀?#8220;璋冭瘯淇℃伅鏍煎紡”涓?#8220;紼嬪簭鏁版嵁搴?/Zi)”鍗沖彲銆?br />
    3. 璀﹀憡錛氭湭鎵懼埌涓嬪垪鐜鍙橀噺
      4>欏圭洰 : warning PRJ0018 : 鏈壘鍒頒笅鍒楃幆澧冨彉閲?
      4>$(PKCS11_INC)
      鐢變簬欏圭洰灞炴ч噷璁劇疆鏈夐檮鍔犲寘鍚洰褰?#8220;$(PKCS11_INC)”錛屽洜姝ょ紪璇戠殑鏃跺欎細(xì)鍦ㄧ郴緇熷彉閲忛噷瀵繪壘PKCS11_INC欏圭洰錛屽鏋滄壘涓嶅埌錛屽垯緇欏嚭璀﹀憡錛屽洜姝わ紝鎴戜滑闇瑕佹墜鍔ㄨˉ鍏呰繖涓」銆傛柟娉曞悓姝ラ5錛屽鍔犱竴涓彉閲忎負(fù)PKCS11_INC錛屽鹼細(xì)D:\TrueCrypt\Common錛屽叾涓紝鍊煎氨鏄箣鍓嶆垜浠嫹璐濅笁涓枃浠訛紙pkcs11.h銆乸kcs11f.h銆乸kcs11t.h錛夌殑鐩綍銆?br />
    4. 濡傛灉涓嶅嚭鎰忓鐨勮瘽錛屼綘鍙兘榪樹細(xì)寰楀埌涓涓嬌鐢ㄤ簡PKEY_AppUserModel_ID鏈畾涔夌殑澹版槑絎︾殑閿欒銆傝繖涓槸鐢ㄤ簬鏍囪瘑鐢ㄦ埛鎬佸簲鐢ㄧ▼搴忕殑鍞竴鏍囪瘑銆備綘鍙互鍦⊿etup.h鏂囦歡涓畾涔夛細(xì)
      /*---region add by gc---*/
      #include "wtypes.h"
          const PROPERTYKEY PKEY_AppUserModel_ID = {
              {
                  (unsigned long)2009,/*unsigned long  Data1;*/
                  (unsigned short)12,/*unsigned short Data2;*/
                  (unsigned short)23,/*unsigned short Data3;*/
                  0x44,0x55,0x55,0x55,0x55,0x55,0x55,0x55
              },/*GUID fmtid;*/
              (DWORD)PID_FIRST_USABLE /*DWORD pid;*/
          };
      /*---endregion---*/
      鍏朵腑錛岃繖涓粨鏋勪綋鏄敱GUID鍜孭ID鍏卞悓緇勬垚鐨勩?br />

涓嬭澆閾炬帴

  • TrueCrypt涓嬭澆錛歨ttp://www.sfr-fresh.com/windows/misc/TrueCrypt-6.2a-Source.zip:a/Boot/Windows/Makefile
  • WinDDK涓嬭澆錛歨ttp://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx
  • PKCS11涓嬭澆錛歨ttp://svn.openvpn.net/projects/openvpn/test/time/openvpn/pkcs11-headers/
  • GZip涓嬭澆錛歨ttp://www.gzip.org/ 鎴栬?http://www.gzip.org/gz124src.zip
  • Nasm涓嬭澆錛歨ttp://www.nasm.us/pub/nasm/releasebuilds/2.07/win32/
  • MSVC1.52涓嬭澆錛歨ttp://download.csdn.net/source/620960 錛?5.02MB錛夛紙浼間箮緗戜笂寰堝浜洪兘鍦ㄦ壘1.52錛堟渶鍚庝竴涓彲浠ョ紪璇?6bit紼嬪簭鐨刅C緙栬瘧鍣級錛屼絾瀹樻柟緗戠珯涓婃病鏈夊叕寮涓嬭澆鐨勯摼鎺ワ紝瀹炲湪闈炲父閮侀椃錛屾垜浠嶮SDN璁㈤槄涓嬭澆錛堟敹璐圭殑鍣紝鏉叿錛夊垯鏈?7.6MB錛夛紝濡傛灉澶у瀹炲湪鎵句笉鍒頒笅杞芥垨鑰?5.02MB鐨勪笉鍙敤錛屽彲浠ヨ仈緋繪垜銆?/li>

    鍙傝冮摼鎺?/h3>
    • http://blog.csdn.net/skyremember/archive/2009/09/17/4562090.aspx
    • http://blog.sina.com.cn/s/blog_4758691d0100d8mc.html
    • http://lll332.blog.163.com/blog/static/1553692220093404635752/
    • http://msdn.microsoft.com/en-us/library/aa373931%28VS.85%29.aspx
    • http://hi.baidu.com/hhacker/blog/item/2fc5b3fb0b24132a4f4aea1d.html
    • http://blog.csdn.net/just_one_two/archive/2009/10/05/4634391.aspx
    • http://blog.csdn.net/liufei_learning/archive/2009/12/21/5047632.aspx
    • http://msdn.microsoft.com/zh-cn/library/958x11bc%28VS.80%29.aspx
    • http://bbs.xiakexing.com/cgi-bin/topic.cgi?forum=22&topic=498


    volnet 2009-12-23 23:47 鍙戣〃璇勮
    ]]>鏈澶у叕綰︽暟闂http://www.shnenglu.com/mymsdn/archive/2009/03/04/75564.htmlvolnetvolnetWed, 04 Mar 2009 15:52:00 GMThttp://www.shnenglu.com/mymsdn/archive/2009/03/04/75564.htmlhttp://www.shnenglu.com/mymsdn/comments/75564.htmlhttp://www.shnenglu.com/mymsdn/archive/2009/03/04/75564.html#Feedback0http://www.shnenglu.com/mymsdn/comments/commentRss/75564.htmlhttp://www.shnenglu.com/mymsdn/services/trackbacks/75564.htmlimage

    image

    image

    image

    image 

    image

    image

    image

    image

    浠ヤ笂鍐呭鎽樿嚜銆婄紪紼嬩箣緹庛婸150-154銆?/p>

    涓轟簡鏂逛究浣跨敤錛屼笅闈㈡槸鍙嫹璐濈殑浠g爜錛?/p>

    Math.h

    #pragma once
    
    class Math
    {
    public:
        Math(void);
        ~Math(void);
    
    public :
        //緙栫▼涔嬬編P150-154
    
        //姹傛渶澶у叕綰︽暟錛屾鍑犻噷寰封斺旇緱杞浉闄ゆ硶
        static int Gcd1(int x, int y);
    
        //姹傛渶澶у叕綰︽暟錛屾鍑犻噷寰封斺旇緱杞浉闄ゆ硶錛堝彉鐩稿皢闄ゆ硶鍙樻垚浜嗗噺娉曪級
        static int Gcd2(int x, int y);
    
        static int Gcd3(int x, int y);
    
        inline static bool IsEven(int x);
    
        inline static int Absolute(int x);
    };
    

    Math.cpp

    #include "Math.h"
    
    Math::Math(void)
    {
    }
    
    Math::~Math(void)
    {
    }
    
    int Math::Gcd1(int x, int y)
    {
        //y, x%y欏哄簭涓嶈兘閿欙紱
        return y ? Gcd1(y, x % y) : x;
    }
    
    int Math::Gcd2(int x, int y)
    {
        //涓嶨cd1鐩稿悓鐨勬柟寮忥紝浣嗙敱浜巟%y璁$畻閫熷害杈儀-y瑕佹參錛屼絾鏁堟灉鐩稿悓錛屾墍浠ユ崲鐢▁ - y
        // 浣嗙敤鍑忔硶鍜岄櫎娉曚笉鍚岀殑鏄紝姣斿鍜岋紝%20=10錛?20=70錛屼篃灝辨槸-4脳=10
        // 涔熷氨鏄榪唬嬈℃暟杈僄cd1鑰岃█閫氬父鏄鍔犱簡銆?
        return y ? Gcd1(y, x - y) : x;
    }
    
    int Math::Gcd3(int x, int y)
    {
        if(x < y)
            return Gcd3(y, x);
        if(y == 0)
            return x;
        else
        {
            if(IsEven(x))
            {
                if(IsEven(y))
                    return (Gcd3(x >> 1, y >> 1) << 1);
                else
                    return Gcd3(x >> 1, y);
            }
            else
            {
                if(IsEven(y))
                    return Gcd3(x, y >> 1);
                else
                    return Gcd3(y, x - y);
            }
        }
    }
    
    bool Math::IsEven(int x)
    {
        return !(bool)x & 0x0001;
    }
    
    int Math::Absolute(int x)
    {
        return x < 0 ? -x : x;
    }

    Main.cpp

    #include <stdafx.h>
    #include <iostream>
    #include "Math.h"
    
    using namespace std;
    int _tmain(const int & arg)
    {
        cout<<"Math::Gcd1(42,30) = "<<Math::Gcd1(42,30)<<endl;
        cout<<"Math::Gcd1(30,42) = "<<Math::Gcd1(30,42)<<endl;
        cout<<"Math::Gcd1(50,50) = "<<Math::Gcd1(50,50)<<endl;
        cout<<"Math::Gcd1(0,0) = "<<Math::Gcd1(0,0)<<endl;
        cout<<"Math::Gcd1(-42,-30) = "<<Math::Gcd1(-42,-30)<<endl;
        cout<<"Math::Gcd1(-42,30) = "<<Math::Gcd1(-42,30)<<endl;
    
        cout<<"------------------------------"<<endl;
    
        cout<<"Math::Gcd2(42,30) = "<<Math::Gcd2(42,30)<<endl;
        cout<<"Math::Gcd2(30,42) = "<<Math::Gcd2(30,42)<<endl;
        cout<<"Math::Gcd2(50,50) = "<<Math::Gcd2(50,50)<<endl;
        cout<<"Math::Gcd2(0,0) = "<<Math::Gcd2(0,0)<<endl;
        cout<<"Math::Gcd2(-42,-30) = "<<Math::Gcd2(-42,-30)<<endl;
        cout<<"Math::Gcd2(-42,30) = "<<Math::Gcd2(-42,30)<<endl;
    
        cout<<"------------------------------"<<endl;
    
        cout<<"Math::Gcd3(42,30) = "<<Math::Gcd3(42,30)<<endl;
        cout<<"Math::Gcd3(30,42) = "<<Math::Gcd3(30,42)<<endl;
        cout<<"Math::Gcd3(50,50) = "<<Math::Gcd3(50,50)<<endl;
        cout<<"Math::Gcd3(0,0) = "<<Math::Gcd3(0,0)<<endl;
        cout<<"Math::Gcd3(-42,-30) = "<<Math::Gcd3(-42,-30)<<endl;
        cout<<"Math::Gcd3(-42,30) = "<<Math::Gcd3(-42,30)<<endl;
    
        return 0;
    }

    涓嶈繃鏈変竴鐐瑰煎緱涓鎻愶紝灝辨槸鎵璋撴ц兘鏈濂芥晥鐜囨渶楂樼殑Gcd3涓嶆敮鎸佽礋鏁幫紝涔熷氨鏄渶鍚庝袱琛屾祴璇曚唬鐮佹棤娉曢氳繃銆備絾鏄檺浜庡璐熸暟鐨勬渶澶у叕綰︽暟騫舵病鏈夊畾涔夛紝涔熷氨鏄鍗充究涓婇潰鐨凣cd1鍜孏cd2濂藉儚綆楀嚭浜嗚礋鏁幫紝浣嗗畠浠殑緇撴灉娌℃湁鎰忎箟銆?/p>

    volnet 2009-03-04 23:52 鍙戣〃璇勮
    ]]>
    Emacs 蹇熸寚鍗?/title><link>http://www.shnenglu.com/mymsdn/archive/2008/10/01/emacs-tutorial-chinese-gb.html</link><dc:creator>volnet</dc:creator><author>volnet</author><pubDate>Tue, 30 Sep 2008 19:09:00 GMT</pubDate><guid>http://www.shnenglu.com/mymsdn/archive/2008/10/01/emacs-tutorial-chinese-gb.html</guid><wfw:comment>http://www.shnenglu.com/mymsdn/comments/57235.html</wfw:comment><comments>http://www.shnenglu.com/mymsdn/archive/2008/10/01/emacs-tutorial-chinese-gb.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/mymsdn/comments/commentRss/57235.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/mymsdn/services/trackbacks/57235.html</trackback:ping><description><![CDATA[     鎽樿: 鍒濆叆Emacs錛岃繕鏄鍏ヤ埂闅忎織鐨勶紝鍩轟簬Unix鐨勭▼搴忚繕鏄湪閿洏鍛戒護(hù)涓婁笅浜嗗緢澶х殑鍔熷か錛屼絾榪欐牱鐨勯氱敤鎬т篃寰楀埌浜嗘瀬澶х殑鎻愰珮銆備笅闈㈡槸鎷瘋礉Emacs鐨勫揩閫熸寚鍗楃殑涓瘧鐗堟湰錛屽彧鏄褰曚竴涓嬶紝娌℃湁鍒殑鎰忔濄傚懙鍛墊彁渚涗竴涓媁indows騫沖彴Emacs鐨勫畨瑁呮柟寮忥細(xì)1銆佷笅杞紼macs鍩轟簬Windows鐨勫畨瑁呭寘錛屾垜鏄粠ftp://ftp.keystealth.org/pub/gnu/gnu/emacs/windows/ema...  <a href='http://www.shnenglu.com/mymsdn/archive/2008/10/01/emacs-tutorial-chinese-gb.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/mymsdn/aggbug/57235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/mymsdn/" target="_blank">volnet</a> 2008-10-01 03:09 <a href="http://www.shnenglu.com/mymsdn/archive/2008/10/01/emacs-tutorial-chinese-gb.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>[鐭ヨ瘑搴揮[杞澆]鍗佸勾MFC緇忓巻璁よ瘑鐨凪icrosoft鎶鏈?ZT)http://www.shnenglu.com/mymsdn/archive/2006/12/04/15988.htmlvolnetvolnetMon, 04 Dec 2006 14:05:00 GMThttp://www.shnenglu.com/mymsdn/archive/2006/12/04/15988.htmlhttp://www.shnenglu.com/mymsdn/comments/15988.htmlhttp://www.shnenglu.com/mymsdn/archive/2006/12/04/15988.html#Feedback0http://www.shnenglu.com/mymsdn/comments/commentRss/15988.htmlhttp://www.shnenglu.com/mymsdn/services/trackbacks/15988.html 鐭ヨ瘑搴?KnowledgeLibrary)

    鍥哄畾閾炬帴錛?a href="/mymsdn/category/3173.html">http://www.shnenglu.com/mymsdn/category/3173.html


    鏂囩珷鏍囬錛氬崄騫碝FC緇忓巻璁よ瘑鐨凪icrosoft鎶鏈?ZT)
    鍏抽敭瀛?/strong>錛歁FC銆丮icrosoft銆佹妧鏈姣斻佹妧鏈彂灞?br />杞澆鑷?/strong>錛?a >http://blog.vckbase.com/hangwire/archive/2005/05/26/5806.html
    浣滆?/strong>錛歨angwire
    鍙戣〃鏃墮棿錛?005-05-26 09:13


    涓銆佸垵璇哅FC

    銆銆鎴戞渶鍒濈煡閬揗FC澶ф鏄湪1993騫達(dá)紝閭d釜鏃跺橵isual C++榪樻病闈笘錛屽綋鏃禡icrosoft鐨凜++緙栬瘧鍣ㄨ繕寰堝急錛屽畼鏂圭殑鍚嶅瓧鏄疢icrosoft C/C++ 7.0錛孧FC鐨勭増鏈槸1.0錛屽嚑涔庢病鏈夊紩璧蜂粈涔堝弽鍝嶏紝閭d釜鏃舵湡鏈濂界殑C++寮鍙戠幆澧冩槸Borland C++ 3.1錛屽叾瀹烇紝澶ф鏄?992騫?1鏈堜喚錛屼竴涓伓鐒剁殑鏈轟細(xì)錛屾垜棰嗙暐鍒癇orland鍏徃鐨勫帀瀹籌紝璁頒笉寰楀湪浠涔堝湴鏂癸紝鎴戠湅鍒頒竴涓粷濡欑殑闆嗘垚寮鍙戠幆澧冿紝鍗砊urbo C++ 3.0 for Windows錛岃繖鏄垜璁板繂涓涓涓湡姝g殑Windows鐜涓嬬殑C++闆嗘垚寮鍙戠幆澧冿紝閭g嬋鍔ㄧ殑鎰熻鑷充粖浠嶈蹇嗙姽鏂幫紝涓嶅姘旂殑璇達(dá)紝褰撴椂鑷沖皯鍦–++鏂歸潰錛孧icrosoft涓嶣orland涓嶆槸涓涓按騫崇殑錛孊orland鏄庢樉鐨勮楂樹簬Microsoft 錛孊orland鐨勪駭鍝佸湪鎶鏈笂緇欐垜鐣欎笅娣卞埢鐨勫嵃璞°傞偅涓椂鍊橫icrosoft鏈濂界殑寮鍙戝鉤鍙版槸Visual Basic 3.0錛岃孊orland鐨凞elphi姝e浜庡紑鍙戦樁孌碉紙Delphi 鐨勪唬鐮佸悕縐版槸錛?VB Killer"錛夆︹︼紝鎯寵搗榪欎簺鍗佸嚑騫村墠鐨勫線浜嬶紝鎴戜笉紱佹劅鎱ㄤ竾鍗冦?/p>

    銆銆鍗佸嚑騫存潵錛屾垜鐢ㄨ繃璁稿寮鍙戠幆澧冿紝鍏充簬Visual Basic錛屾垜鐢ㄨ繃鏈鏃╃殑DOS鐗堟湰錛學(xué)indows鐗堢殑Visual Basic鎴戝熀鏈笂鍏ㄩ兘鐢ㄨ繃錛岃嚦浠婃垜榪樿寰楁瘡涓増鏈殑VB瀹夎鐩樼鐩樼殑鐩樻暟銆傚悓鏍鳳紝鎴戠敤榪囧悇涓増鏈殑Delphi錛岀壒鍒槸Delphi 2.0錛岀粰鎴戠暀涓嬫瀬濂界殑鍗拌薄銆侱elphi鎻愪緵鐪熸緙栬瘧鐨勫彲瑙嗗寲寮鍙戠幆澧冿紝閭d釜鏃跺欙紙1994騫村乏鍙籌級錛孌elphi灝卞彲浠ュ紑鍙戝甫鏈塆UI鐨勫姩鎬侀摼鎺ュ簱錛屼綘鍙互鎯寵薄錛屽湪Microsoft Access 2.0鐨勫簲鐢ㄧ▼搴忎腑鍙互鍔犺澆涓涓狣elphi Form騫惰繘琛岀▼搴忎氦浜掞紝閭g鎰熻鐪熸槸媯掓瀬浜嗐?/p>

    銆銆Borland C++鏄垜蹇冧腑鏃犳硶鎶規(guī)帀鐨勯仐鎲撅紝浠嶵urbo C鍒癈++ Builder錛屾垜娣卞埢鐨勪綋楠屽埌Borland鐨勮緣鐓屽拰鏃犲錛孌elphi浠嶸B Killer璧板埌涓篤B鎶よ埅錛堜綘鍙互鎯寵薄Delphi涓姝ュ埌浣嶇殑ActiveX 鎺т歡寮鍙戞妧鏈湁澶氱墰錛屾棭鏈熺殑VB鏈夊鍦燂紝鏃╂湡鐨刅B涓嶈兘寮鍙戝姩鎬侀摼鎺ュ簱錛屽洜姝ゆ棤娉曞紑鍙慉ctiveX 鎺т歡錛屾兂璧鋒潵鐪熶護(hù)浜哄槝鍞忎笉宸詫級錛孊orland C++鐨勫懡榪愪篃鏄笉嫻庛侭orland C++ 3.1鐨勮緣鐓屾案榪滀笉鍐嶄簡錛屽崄鍑犲勾鐨勫紑鍙戝伐浣滀腑錛屾垜鍦–++涓婃姇鍏ヤ簡澶ч噺鐨勭簿鍔涳紝Borland C++鏇劇粡緇欐垜甯︽潵鏃犳暟鐨勬縺鍔紝鐒惰岃繖涓粡鍏哥殑鍚嶅瓧鍗村湪涓嶮icrosoft鐨勭珵浜変腑娓愭笎鐨勬祦閫濅簡鈥︹︺?/p>

    銆銆MFC4.0鐨勫嚭鐜幫紝浣垮緱浜轟滑鎰熻Microsoft鍦–++鏂歸潰璧朵笂鏉ヤ簡錛岃繖涓鐗堢殑MFC鏄疻in95鎺ㄥ嚭鍚庡嚭鐜板湪Visual C++ 4涓紙Microsoft娌℃湁VC 3錛孷C4浠ュ墠鐨勭増鏈槸2.2銆?.1銆?.0銆?.51銆?.5銆?.0錛夈備篃璁告槸瀵笲orland C++鐨勬綔鎰忚瘑鐨勫け鏈涳紝鎴戜笉鐭ヤ笉瑙夌殑鎺ュ彈浜哅FC錛孷C 4.2鎺ㄥ嚭鏃訛紝鎴戦氳繃姝e父娓犻亾璐拱浜嗚繖涓紪璇戝櫒鐨勪紒涓氱増銆?/p>

    浜屻佸叧浜嶮icrosoft

    銆銆鍏充簬Microsoft錛屾湁鏃犳暟鐨勪漢瑕佸榪欎釜鍚嶅瓧鍙欒鎰熻錛岃繖涓護(hù)浜鴻鍘岀殑鍚嶅瓧錛佷笉鐭ラ亾鏄枩嬈㈣繕鏄啂鎭訛紝浣犳槸紼嬪簭鍛橈紝浣犵殑蹇冩濆彲鑳藉氨瑕佸洜Microsoft鐨勫瓨鍦ㄨ屽姩錛屽嵆浣夸綘鐢↙inux錛屼綘鍙兘涔熸槸鍥犱負(fù)Microsoft鎶鏈洜绱犮傚灝戝勾鏉ワ紝榪欎釜鍚嶅瓧姣忓ぉ閮藉嚭鐜板湪浣犮佹垜銆佷粬鐨勯潰鍓嶏紝鍥犱負(fù)浣犱笉寰椾笉闈㈠Windows鐨勫瓨鍦紝鍙槸浣犳啂鎭ㄨ繖涓悕瀛楀悧錛熶綘璁ㄥ帉榪欎釜鍚嶅瓧鍚楋紵鎴戜笉鐭ラ亾鏄惁宸茬粡瀵硅繖涓悕瀛楅夯鏈ㄤ簡銆?/p>

    銆銆1998騫存垜涓漢璁簡Microsoft MSDN Universal 鐗堬紝鎴戝紑濮嬫瘮杈冨叏闈㈡帴瑙﹁繖涓叕鍙哥殑寮鍙戞妧鏈紝浣犲彲浠ユ兂璞★紝1998騫村綋浣犻潰瀵逛笂鐧懼紶鎶鏈厜鐩樼殑鏃跺欙紝浣犲氨鐭ラ亾浠涔堝彨鍋?鍘氬害"錛屽綋鎴戜滑鏈夋椂璇村嚭"璧朵笂"鎴?"杈懼埌"Microsoft鏌愪簺浜у搧鐨勬按騫崇殑鏃跺欙紝鍙兘鎴戜滑緙轟箯瀵硅繖涓叕鍙?鍘氬害"鐨勭湡瀹炰簡瑙c傝繘鍏SDN錛屾垜鎰熻Microsoft綆鐩翠笉鏄竴涓?鍏徃"錛岃屾槸錛堟垨鑰呮鍦ㄥ艦鎴愶級涓涓?紺句細(xì)"銆?/p>

    銆銆褰撴椂钁楀悕鐨勬妧鏈綉绔?a >http://www.codeguru.com鍏ㄩ儴鐨勬妧鏈祫鏂欐槸鍙笅杞界殑錛堥偅涓椂鍊?a >http://www.codeguru.com鎻愪緵鏁翠釜緗戠珯鍐呭涓嬭澆鏈嶅姟錛屽ぇ綰?M宸﹀彸錛夛紝澶у悕榧庨紟鐨?a 鐨勬櫙璞★紵鍙兘寰堝浜烘兂榪囷紝濡傛灉Borland涓嶅瓨鍦紝瀵筂icrosoft涓嶆槸鏇存湁鍔涘悧錛熷叾瀹濵icrosoft鍙兘綺鵑氫腑鍥藉巻鍙詫紝璇昏繃銆婁笁鍥姐嬨佸崄鍒嗕簡瑙f垬鍥芥椂鏈熺殑涓浗錛屽叾瀹濨orland褰㈠紡涓婄殑瀛樺湪錛屽Microsoft鏄崄鍒嗘湁鍒╃殑錛岃嚦灝戝艦寮忎笂榪樻湁绔炰簤瀵規(guī)墜錛岃屼簨瀹炰笂Borland宸茬粡鍙楁帶浜嶮icrosoft錛圡icrosoft鏄疊orland鐨勫ぇ鑲′笢錛夈備綘鍙互鐪嬪埌涓浜涘井濡欑殑鐜拌薄錛欱orland涓篗icrosoft鎻愪緵浜嗗ぇ閲忕殑浜烘墠錛屽叾涓寘鎷珼elphi鎬昏璁″笀浠ュ強(qiáng)Borland C++緙栬瘧鍣ㄧ殑鏍稿績鎴愬憳錛涘悓鏃朵篃涓篗icrosoft .NET鎻愪緵寮烘湁鍔涚殑鎶よ埅鏈嶅姟錛堢湅鐪婥# Builder銆丏elphi .NET錛夈?998騫碝icrosoft 鐨凜OM鎶鏈熀鏈凡緇忔垚鐔燂紝榪欎釜鎶鏈嬌浜烘劅鍒伴渿鎾鹼紝褰撴椂Microsoft鐨勫鎵嬩滑鎻愬嚭"OpenDoc"鐢ㄤ簬瀵規(guī)姉"COM"錛屼綘鐪嬬湅"OpenDoc"闃佃惀鐨勫嚑涓垚鍛橈細(xì)IBM銆丄pple銆丅orland銆丯ovell錛屼綘浼?xì)鎰熷埌杩欎釜闃佃惀鍗佸垎璞崕銆佸己澶с備絾緇撴灉鍗村樊寮轟漢鎰忥紝"OpenDoc"鏃犵柧鑰岀粓錛岃?COM"渚濈劧鐢熸満鍕冨媰銆?/p>

    銆銆鏈変漢璇?COM"娌¤惤浜嗭紝閭d箞灝卞お涓嶄簡瑙icrosoft浜嗐傚湪涓?OpenDoc"鐨勭珵浜変腑錛?COM"鏄釜褰誨簳鐨勮儨鍒╄咃紝鍦ㄤ笌"Java"鐨勭珵浜変腑錛?COM"鎴愬姛鐨勮繘鍖栦簡錛屽湪榪欎釜榪囩▼涓璏icrosoft浣撶幇浜嗗己澶х殑鍚告敹鑳藉姏銆佷互鍙?qiáng)鏃犳硶鎯宠薄鐨勯煣鍔层?NET鍙笉榪囨槸COM鐨?鍒悕"鑰屽凡銆傚浜庝竴涓粡楠屼赴瀵岀殑C++紼嬪簭鍛樿岃█錛?NET灝辨槸COM鐨勮繘鍖栵紝鑰孧icrosoft鍐呴儴.NET灝辨槸"COM 3.0"錛圤LE2灝辨槸COM 2.0錛夛紝鑰?CLR"灝辨槸涓涓笉鎷╀笉鎵g殑COM瀵硅薄銆傛浘緇忔湁浜洪棶鎴戯紝鏃㈢劧鐗涢】鏃朵唬灝卞瀹氫簡鍩虹錛堟兂鎯寵憲鍚嶇殑鐗涢】-鑾卞竷?yōu)D尐鍏紡錛夛紝鍑犵櫨騫村悗鐨勪粖澶╋紝鏁板榪樼爺絀?寰Н鍒?鍚楋紵鍥炵瓟褰撶劧鏄緷鐒跺湪鐮旂┒錛?寰Н鍒?鏃╂湡鏄拡瀵瑰嚱鏁扮殑錛岀幇浠?寰Н鍒?鏄拡瀵?嫻佸艦錛圡anifold錛夈佺氦緇翠笡錛團(tuán)iber Bundle錛?鐨勶紝姒傚康娣卞ゥ浜嗭紝鍙槸鍩烘湰鎬濇兂涓嶅彉錛屽彧鏄?寰Н鍒?鐨勬濇兂寰楀埌鍚堢悊鐨勫歡鎷撲笌榪涘寲錛屼綘浜嗚ВMicrosoft鍚楋紵Microsoft Research鏈変竴鎵硅秴涓嫻佺殑鏁板瀹跺湪涓篗icrosoft宸ヤ綔錛屽叾涓竴浜涙槸鏂愬皵鍏瑰鐨勫緱涓伙紝Microsoft姝e湪瀹炵幇濡傚悓"寰Н鍒?榪涘寲鍒?寰垎嫻佸艦"涓鏍峰皢"COM"榪涘寲鍒?.NET"銆備粠縐戝姒傚康瑙掑害涓婂垎鏋怌OM涓嶫ava錛屽彲鑳紺OM鏇村叏闈€佺簿紜紝浠庡疄鐜扮殑鎴愮啛搴︿笂Java鍙兘鏇存垚鐔燂紝鍙槸浣犵湅鍒幫紝Microsoft姝e湪涓嶇揣涓嶆參鐨勮拷璧躲侻icrosoft浠や漢鑱旀兂璧鋒垬鍥芥椂鏈熺殑寮虹Е銆?/p>

    銆銆鎴樺浗鏃舵湡鐨勭Е鍥斤紝閲囧彇"榪滀氦榪戞敾""鎶氬急鎺犲己"絳夋帾鏂藉偛瑙嗗叚鍥斤紝浠婂ぉ鐨凪icrosoft涔熸槸榪欐牱錛孷B1.0鏃訛紝Microsoft鎺ㄥ嚭"VBX"鎺т歡鎶鏈紝浼楀鐨勫皬鍏徃寰椾互鐢熷瓨錛孧icrosoft鑷繁涓嶅紑鍙?VBX"緇勪歡錛屽悓鏍?VBX"榪涘寲涓?OCX"鏃訛紝Microsoft騫朵笉鍗佸垎寮哄ぇ錛屽彲鏄繖縐嶈瘯鎺㈠緱鍒頒紬澶氬皬鍏徃鐨勫搷搴斻?997騫碝icrosoft Office 97銆?998騫碝icrosoft鎺ㄥ嚭Visual Studio 6.0錛岀粰浼楀涓佸皬鍏徃鎻愪緵浜嗙敓瀛樸佸彂灞曠殑鏈轟細(xì)錛屼緥濡侻icrosoft Office 97涓泦鎴愪簡Visual Basic for Application 5.0錛岃繖欏規(guī)妧鏈嬌寰楀嚑鐧懼杞歡寮鍙戝晢涓嶮icrosoft絳劇講浜哣BA鎶鏈鍙崗璁紝鍗充嬌AutoDesk榪欐牱鐨勫叕鍙擱兘涓嶮icrosoft絳劇講浜嗚繖涓崗璁紝榪欎釜鍗忚浣垮緱姣忎釜闆嗘垚VBA鐨勪駭鍝佺殑緇欎釜鐢ㄦ埛璁稿彲涓篗icrosoft浠?0$鐨勮鍙垂錛屽鏋滀綘浜嗚ВVSIP錛圴isual Studio Integration Protocol錛夊崗璁紝浠ュ強(qiáng)鏈夊灝戝叕鍙哥璁簡VSIP鍗忚錛屼綘灝辯湡姝f劅瑙夊埌Microsoft鐨勫彲鎬曪紱Microsoft Office 97銆乂isual Studio 6.0鐨勭敤鎴風(fēng)晫闈㈠崄鍒嗘紓浜紝涓轟粈涔圡icrosoft鑷繁鐨勫紑鍙戝伐鍏蜂笉鎻愪緵綾諱技鐨勮蔣浠剁粍浠訛紵浣犵湅鍒頒紬澶氱涓夋柟鐨凪icrosoft鐩熷弸綰風(fēng)悍鎺ㄥ嚭鑷繁鐨勭晫闈㈠簱浠ユā浠縈icrosoft錛屼粬浠笉浼?xì)鍙嶅Microsoft錛屽洜涓轟粬浠凡緇忓艦鎴愪簡浣垮緱Microsoft浠ュ強(qiáng)榪欎簺鍏徃寰椾互鐢熷瓨鐨勭敓鎬佸湀銆?/p>

    銆銆Microsoft鐨勬妧鏈偍澶囨湁澶氬皯錛孧icrosoft涔嬪鐨勪漢寰堥毦璇存竻妤氾紝Microsoft涓浗鍏徃涔熸湭蹇呬簡瑙e灝戯紝1999騫碬TL綾誨簱鍒氬垰鍑虹幇鐨勬椂鍊欙紝浜轟滑灝卞笇鏈沇TL鑳藉緱鍒板畼鏂圭殑鏀寔錛屾垨鎺堟潈緇欎竴涓狹icrosoft涔嬪鐨勪竴涓叕鍙革紙浣犺兘鎯寵薄鍑築orland C++ 5.0鍐呯疆鐨凙ctiveX寮鍙戞満鍒舵槸鍩轟簬Microsoft ATL綾誨簱鍚楋紵錛夛紝鐩村埌浠婂ぉ錛學(xué)TL渚濈劧濡傛晠錛屾垜浠畬鍏ㄧ浉淇★紝濡傛灉Microsoft寮哄姏鎺ㄥ箍WTL錛學(xué)TL瀹屽叏鍙互嫻佽錛屽彲鏄疢icrosoft涓嶇己綾諱技鐨勬妧鏈紝綾諱技鐨勭被搴撹繕鏈塀CL(Base Control Library錛屼竴涓敤浜庡紑鍙戣交閲忕駭ActiveX鎺т歡鐨勭被搴?錛孧icrosoft榪樻湁涓涓熀浜嶢TL鐨勭被搴擄紝榪欎釜綾誨簱鐢ㄤ簬寮鍙慉ctiveX Designer錛孉ctiveX Designer鏄粷澶у鏁扮▼搴忓憳涓嶄簡瑙g殑涓綾誨璞★紝濡傛灉浣犵啛鎮(zhèn)塐ffice寮鍙戯紝浣犵煡閬揙ffice VBA 涓湁涓綾誨璞★紝鍗矲orm2錛屾澶朧B6.0 涓殑鎶ヨ〃璁捐鍣紙浠ュ強(qiáng)钁楀悕鐨凙ctive Reporter錛夛紝閮藉睘浜庢綾誨璞★紝鐢ㄨ繖涓被搴擄紝浣犲彲浠ヤ負(fù)VB6.0浠ュ強(qiáng)闆嗘垚VBA鐨勭郴緇熸彁渚涘畾鍒跺寲鐨勫彲瑙嗗寲璁捐鏈哄埗絳夌瓑錛屽浠夾ctiveX Designer宸茬粡婕斿寲涓洪泦鎴愪簬Visual Studio .NET涓殑璁捐鍣ㄣ?/p>

    涓夈佸悜Microsoft瀛︿範(fàn)

    銆銆鏃犺浠庝粈涔堣搴﹁瘎浠稭icrosoft錛屾垜瑙夊緱Microsoft鏄煎緱鎴戜滑瀛︿範(fàn)鐨勶紝濡傛灉璇寸敓媧誨湪榪欎釜鏃朵唬鏈塎icrosoft瀛樺湪鏄竴鍦虹伨闅撅紝浣犲氨搴旇鐥涙仺榪欎釜瀹朵紮錛屼絾浣犻鍏堣鍚戣繖涓浼欏涔?fàn)锛佹垜鏃犳剰湄?fù)Microsoft姝屽姛棰傚痙錛屾垜鍙槸鎯寵鍑哄崄鍑犲勾鎴戝Microsoft鎶鏈殑鎰熷彈銆?/p>

    銆銆Microsoft鍦ㄧ爺絀跺紡鐨勫紑鍙戜腑鍙楃泭鏋佸ぇ錛屽鏋滀綘鏈夊叴瓚o紝浣犲彲浠ヨ闂?a 縐戝鏃犲浗鐣?銆傛妧鏈槸鍚︽湁鍥界晫錛熶笉鐭ラ亾鏄惁鏈夊畾璁猴紵錛佹兂鎯矰VD絳夋妧鏈笓鍒╃粰鍥藉唴涓氱晫甯︽潵鐨勭伨闅撅紝涓嶇煡閬撳簲涓嶅簲璇ョ棝瀹氭濈棝錛屽湪Microsoft鏍″洯鎷涜仒鐜板満鐨勬皵姘涗腑錛屾垜浼間箮鏄庣櫧浜嗕負(fù)浠涔堝浗浜?鍘熷垱鎶鏈?灝戝緱鍙溿傛垜璇昏繃鍑犳湰Microsoft浜氭床鐮旂┒闄㈢殑楂樻墜鍐欑殑涔︼紝鏄庢樉鍙互鐪嬪嚭錛孊ill gate 鏄粬浠殑綺劇棰嗚浠ュ強(qiáng)浠栦滑瀵筂icrosoft鐨勮檾璇氾紝鍥藉唴鐨勭爺絀舵満鏋勫簲褰撶爺絀朵竴涓婱icrosoft鐨勭敤浜轟箣閬擄紝Microsoft濂藉儚鏄笁鍥介噷鐨勪漢鐗╋紝涓嶇煡鏄垬澶囪繕鏄浌鎿嶏紝鎴栬呬簩鑰呯殑娣峰悎鐗┿傛垜緇忓父璺繃瑗挎牸鐜涘ぇ鍘︼紝絎竴嬈¤タ鏍肩帥澶у帵榪涘叆鐪熸湁"鏈濆湥"鐨勬劅瑙夛紝涔熶笌Microsoft涓浗鐨勫嚑涓眰嬈$殑浜烘墦榪囦氦閬擄紝鍚勪腑婊嬪懗瀹炲湪涓璦闅懼敖銆?/p>

    銆銆鍦∣ffice澶ф垬涓紝鍥戒駭杞歡鐨勭‘鍦ㄤ竴浜涙柟闈笌Microsoft榪涜杈冮噺錛屽叾瀹炵粰浜虹殑鎰熻寰堝媺寮猴紝鐣岄潰涓婄殑浼兼槸鑰岄潪錛屾垨鐢ㄦ埛涔?fàn)鎯枤w潰鐨勬帴榪戝茍涓嶈兘瑙e喅鏍規(guī)湰鐨勯棶棰橈紝涓涓ソ鐨勮蔣浠跺紑鍙戜漢鍛樺繀欏繪槸涓涓蔣浠朵嬌鐢ㄧ殑楂樻墜錛屽緢闅炬兂璞′竴涓蔣浠舵搷浣滄按騫沖緢鎷欏姡鐨勫紑鍙戜漢鍛樿兘寮鍙戝嚭楂樻按騫崇殑杞歡錛屾垜鏈鏃╀嬌鐢ㄧ殑杞歡涔嬩竴灝辨槸Microsoft Word錛屽綋鏃剁殑鐗堟湰鏄?.0錛屽ぇ姒傛槸1992騫寸殑浜嬫儏錛岀粰鎴戠暀涓嬫繁鍒誨嵃璞$殑鏄泦鎴愪簬Word涓殑Word Basic錛屽悗鏉ワ紝鎴戞帴瑙﹀埌Excel 3.0錛屼笉鍑烘墍鏂欙紝Excel涓泦鎴愮殑鏄疎xcel Basic錛屽悗鏉ヤ嬌鐢ㄧ殑Access涓嚜鐒跺唴緗瓵ccess Basic 1.0錛屽湪榪欎簺杞歡闆嗘垚鎹嗙粦鎴怬ffice涔嬪墠錛屾垜灝辨劅瑙夎繖浜涗駭鍝佺殑鏋勬濆崄鍒嗕簡涓嶈搗錛屽緢鍏鋒湁Microsoft鐨勯鏍鹼紝鍥犱負(fù)浣犵煡閬擄紝鍗充嬌鏄竴涓狣OS錛孧icrosoft閮借鎻愪緵涓涓唴緗殑QBasic鎴朑W Basic銆傝櫧鐒跺叧浜嶮icrosoft鐨勪駭鍝佽瘎璁哄緢澶氾紝浣滀負(fù)涓涓妧鏈漢鍛橈紝鎴戣涓篗icrosoft鐨勪駭鍝佹瀯鎬濈粷瀵規(guī)槸絎竴嫻佺殑錛屼粠1994騫存棭鏈熺殑Office緋誨垪鍒?997騫村艦鎴愮殑Office 4.2錛屾垜璁や負(fù)錛屾妧鏈瀯鎬濅笂鍧囬鍏堜簬鎴戝浗2002騫翠互鍚庣殑Office浜у搧錛屼綘鍚榪囧涓嬭娉曞悧錛?Dos 浣滀負(fù)鎿嶄綔緋葷粺鐨勬椂浠o紝W(xué)indows鏄簲鐢ㄨ蔣浠訛紱Windows鏄搷浣滅郴緇熸椂錛孫ffice鎴愪負(fù)Dos鏃朵唬鐨刉indows錛涢偅涔堝鏋滄寜姝よ寰嬶紝Office浼?xì)涓嶄細(xì)鏇夸唬Windows鑰屾垚涓烘搷浣滅郴緇燂紵"錛岀幇鍦ㄥ湪寮鍙戦鍩烿isual Studio( .NET)姝e湪鎴愪負(fù)鍙︿竴涓狾ffice錛屼綘娉ㄦ剰鍒頒簡鍚楋紵鎺у埗Visual Studio( .NET)闆嗘垚寮鍙戠幆澧冪殑浠嶇劧鏄竴涓狟asic璇█寮曟搸錛圴isual Basic .NET錛夈?

    銆銆涓庤澶氬叕鍙鎬笉鍚岀殑鏄紝鍦ㄦ妧鏈綋緋諱笂錛孧icrosoft鍑犱箮鎵鏈夌殑浜у搧鏄伅鎭浉鍏崇殑錛學(xué)indows銆丱ffice銆乂isual Studio .NET铏界劧鍚勪笉鐩稿悓錛屼絾鍏叡鐨勬牳蹇冨嵆灝嗗艦鎴愶紝鎴戜滑宸茬粡鐪嬪埌錛屾牳蹇冪粍浠舵柟闈紝Office涓嶸isual Studio .NET鏃ユ笎瓚嬩簬涓鑷達(dá)紝渚嬪Microsoft姝e湪灝哋ffice 2003鐨勬牳蹇冪粍浠禫BA 6.X閫愭鐢ㄦ柊鐨刅isual Studio Tools for Office鏇夸唬錛岃屾垜浠緷鐒跺湪涓浜涗技鏄岄潪鐨勭幇璞′笂涓嶮icrosoft鐨勪駭鍝佹瘮杈冨樊璺濓紝鍥藉閲囪喘鎴栨斂搴滈噰璐敮鎸佺殑鍏徃錛屼笉鍘婚捇鐮旀牳蹇冩妧鏈紝鍙槸鎬ュ姛榪戝埄鐨勯噰鐢ㄧ煭鏈熻涓烘ヤ簬涓嶮icrosoft鐩鎬簤錛屼笉鐭ユ槸鍚︽湁铓嶈湁鎾兼爲(wèi)鐨勬劅瑙夛紝涓漢鐨勪綋楠屾槸錛屽厛瀛︿範(fàn)Microsoft錛岃笍韙忓疄瀹炵殑瀛︼紝浜嗚ВMicrosoft錛屾繁鍏ョ殑浜嗚В錛岀劧鍚庡啀鍠婂彛鍙楓?/p>

    鍥涖佷負(fù)浠涔堢敤MFC錛?/p>

    銆銆緇忚繃鑻ュ共騫寸殑绔炰簤錛孊orland 鐨凮WL鍑犱箮娑堝け浜嗭紝榪欎釜OWL鏄釜闈炲父婕備寒鐨凜++綾誨簱錛屽湪Borland C++ 3.1椋庡厜鏃犻檺鐨勫勾浠o紝OWL鐪熸鐨勫仛鍒頒簡鐙椋庨獨(dú)銆傜劧鑰岋紝Borland C++ 4.0閿欒繃浜嗚繘鍏?2浣嶇▼搴忕殑鏈浣蟲椂鏈猴紝BC 4.0鎺ㄥ嚭鍚庝笉涔咃紝榪庢潵浜哤in95錛孊orland浠撲績涓婇樀錛屼互涓涓皬鐨?Pack"浣垮緱BC4鍙互緙栬瘧鍩轟簬Win4鐨勭▼搴忥紝褰撴椂鐨刅isual C++鏄?.0鐗堬紝鏀寔Window16鐨勭増鏈負(fù)Visual C++1.51錛屾湁鎰忔濈殑鏄疊orland鍙互鐢ㄥ悓涓涓紪璇戝櫒鍚屾椂鏀寔Win16銆乄in32錛岃孧icrosoft鍗翠笉寰椾笉涓篧in16銆乄in32鎻愪緵涓嶅悓鐨勭紪璇戝櫒銆傜劧鑰岋紝闈炴寮忕増鏈殑Visual C++ 2.1涓嶸isual C++ 2.2鍗存?zhèn)勬?zhèn)勫湴鏀寔浜哤in95鐨勬渶鏂扮壒寰侊紝鍗砏in95鏂版彁渚涚殑涓緇勫叕鍏辨帶浠訛紝鍦ㄦ垜鐨勫嵃璞′腑錛孊orland瀵筗in95鏂扮壒寰佺殑鏀寔涓嶅埄浣垮緱MFC涓嶰WL鐨勮窛紱繪瀬澶х殑緙╃煭浜嗐傜◢鍚庡埌鏉ョ殑Borland C++ 4.5娌℃湁鏀瑰彉榪欎釜鐘跺喌錛屽敖綆orland C++ 5.0鍚屾椂鏀寔OWL涓嶮FC錛屽彲鏄觸璞″凡緇忔樉闇詫紝Borland C++闈炲父閬楁喚鐨勫彧璧板埌浜?.5鐗堛侰++ Builder铏界劧褰㈠紡涓婂紩鍏ヤ簡Delphi鐨刅CL搴擄紝鍙槸璁稿C++紼嬪簭鍛樺茍涓嶄拱璐︼紝鍥犱負(fù)璁稿浠++涓轟箰鐨勪漢鏇村枩嬈互緙栬緫鐨勬ā寮忚繘琛岀紪鐮併俈isual C++ 4.0鐨勫嚭鐜幫紝鍦–++榪欎釜鎴樺満涓婏紝Borland寮濮嬭惤璐ヤ簡銆?/p>

    銆銆MFC鍙戝睍鍒頒粖澶╋紝宸茬粡鍗佸騫翠簡錛屽敖綆¤璐笉涓錛屼絾鍙互鑲畾錛屽崄鍑犲勾鐨勬妧鏈Н绱凡緇忓瀹氫簡MFC鐨勭敓瀛樺熀紜錛屽嵆浣縈icrosoft鐨勯暱瑙掑彂甯冿紝MFC涔熶笉鑳芥帹鍑篧indows鐨勮垶鍙幫紝浜嬪疄涓婏紝闀胯錛圠onghorn錛変箣鍚庣殑Visual Studio .NET浠嶅皢MFC浣滀負(fù)涓涓噸瑕佺殑緇勬垚閮ㄥ垎錛屽湪浠婂勾鐨刅isual Studio .NET 2005涓紝MFC鍦–++涓殑浣嶇疆渚濈劧濡傛晠銆侻FC鐨勬湭鏉ワ紝搴旇涓嶅繀鎷呭績錛屽彧瑕佷綘娣卞叆鑰冨療.NET綾誨簱錛屼綘浼?xì)鍙戠帋图孧FC鐨勮澶氭濇兂鏈哄埗姝f?zhèn)勭劧杩涘?NET錛屼笌姝ゅ悓鏃訛紝Microsoft鐨勭涓夋柟鐩熷弸鍗佸騫存潵宸蹭負(fù)MFC寮鍙戜簡澶ч噺鐨勬墿灞曞簱錛屽鏋淢icrosoft鏄埞錛岀涓夋柟鐩熷弸灝辨槸杞借垷涔嬫按銆傝澶氫漢璁や負(fù)MFC涓嶅彂灞曚簡錛屽叾瀹炴槸涓縐嶉敊瑙夛紝Visual C++ 6鐨勭晫闈㈠崄鍒嗙粡鍏革紝鐗瑰埆鏄叾涓殑Docking鎺у埗鏉℃満鍒訛紝鍏跺疄Visual C++ 6鐨処DE瀹屽叏灝辨槸MFC鍐欑殑錛屽彲鏄疢FC綾誨簱涓帶鍒舵潯鐩稿叧鐨勭被鍔熻兘寰堝急錛屼負(fù)浠涔堬紵浣犱細(xì)鐪嬪埌璁稿涓嶮icrosoft鍙嬪ソ鐨勫叕鍙革紝浠栦滑寰堝揩鐨勫湪MFC鍩虹涓婂疄鐜頒簡Visual C++ 6 鐨凞ocking鏈哄埗錛岃繖灝辨槸Microsoft鐨勯珮鏄庝箣澶勶紝Microsoft寰堜細(xì)緇欑洘鍙嬫彁渚涙満浼?xì)锛屽叾涓璐殑鍋氭硶灝辨槸鍦ㄨ嚜宸辯殑鍟嗗搧鍖栦駭鍝佷腑棰勫厛鎻愪緵涓浜涙湁瓚g殑鐗瑰緛錛屼嬌寰楀叾浠栦竴浜涘叕鍙歌繘琛屾ā浠夸互甯﹀姩鐢ㄦ埛緹や綋銆侭orland涓嶅叿澶囪繖鏍風(fēng)殑鍌ㄥ銆侻FC絎笁鏂瑰競鍦虹殑綣佽崳錛屽緱鐩婁簬Microsoft鐨勭瓥鐣ヤ笌鏄庢櫤銆侻FC鍙惁璺ㄥ鉤鍙幫紵鐞嗚涓婂畬鍏ㄥ彲浠ワ紝Microsoft涓嶅仛錛屼篃鏄瓥鐣ワ紝浣嗘槸鏈夎澶氶噸瑕佺殑浜у搧Microsoft鍗撮粯璁窶FC縐繪鍒板叾浠栧鉤鍙幫紝浜嬪疄涓婏紝Microsoft鐨勫悎浣滀紮浼翠箣涓Mainsoft鍏徃錛圵indows婧愮爜灝辨槸浠庤繖瀹跺叕鍙告祦澶辯殑錛夛紝鍑犲勾鏉ュ氨鏄礋璐gЩ妞峂FC紼嬪簭縐繪鍒癠INIX銆丩inux銆丄IX絳夋搷浣滅郴緇熶箣涓娿?/p>

    銆銆鏂扮増鐨刅isual C++涓璏FC宸茬粡鏀寔.NET寮鍙戜簡錛孧FC涓嶢TL鐨勫崗浣滄洿濂戒簡銆傛牴鎹垜鐨勭粡楠岋紝MFC銆丄TL涓?NET搴撲笁鑰呭畬鍏ㄥ彲浠ヨ瀺鍚堝湪涓璧風(fēng)患鍚堝簲鐢ㄥ埌瀹為檯鐨勫紑鍙戝伐浣滀腑鍘伙紝濡傛灉浣犳槸MFC琛屽錛屾垜甯屾湜ATL涓?NET搴撹兘鎴愪負(fù)浣犵殑蹇犲疄鐨勫乏鍙蟲墜銆傞偅涔堟湁娌℃湁鍚屾椂鏀寔MFC銆丄TL涓?NET搴撶殑紼嬪簭錛熷綋鐒舵湁錛孷isual Studio .NET IDE灝辨槸錛佽屼笖Visual Studio .NET IDE榪樻敮鎸佺敤ATL涓?NET搴撴墿灞曠殑Addin錛屽鏋滀綘甯屾湜鐢∕FC綆$悊ATL涓?NET搴擄紝璇風(fēng)戶緇敮鎸佹垜錛?/p>

    浜斻佽璇咥pplication瀵硅薄

    銆銆濡傛灉浣犵啛鎮(zhèn)塎icrosoft Office錛屼綘搴旇榪涗竴姝ョ殑鍓栨瀽榪欎釜澶у瀷杞歡錛孧icrosoft Office涓嚑涔庢瘡涓▼搴忛兘鏄彲浜屾寮鍙戠殑錛岃繖涓鐐瑰緱鐩婁簬Microsoft Office鍐呯疆鐨勪簩嬈″紑鍙戞満鍒訛紝涓涓槸鍩轟簬COM鏈哄埗鐨刅BA妯″瀷錛屽彟涓涓槸鍩轟簬.NET妗嗘灦鐨勬墭綆℃ā鍨嬶細(xì)Visual Studio Tools for Office銆備綔涓轟竴鍚嶇▼搴忓憳錛屼綘搴斿綋鍦ㄦ妧鏈搴﹁В鏋怬ffice鐨勬妧鏈粨鏋勩侻icrosoft鐨勫ぇ澶氭暟杞歡鐨勫璞$粨鏋勫彲浠ラ氳繃Visual Studio鎻愪緵鐨勫伐鍏稯LE/COM Object Viewer鑰冨療鍏剁被鍨嬪簱寰楀埌錛岄氳繃寮曠敤綾誨瀷搴擄紝浣犵敋鑷沖彲浠ュ緱鍒版弿榪板璞′俊鎭殑C++澶存枃浠躲傝繖鏍峰仛鐪熸槸濂藉澶氬銆備竴涓吀鍨嬬殑Office閫氬父閮芥湁涓涓狝pplication瀵硅薄錛堟垨鍏朵粬涓涓笌涔嬬浉褰撶殑瀵硅薄錛夛紝榪欎釜瀵硅薄鐩稿綋浜庤蔣浠舵灑綰斤紝鍦ㄨ繖閲岋紝鎴戜滑涓嶈璁篛ffice錛屽熸璇濋璇磋Application瀵硅薄銆傚ぇ澶氭暟鏀寔鎵╁睍錛圓ddin銆丳lugin錛夌殑杞歡閮藉瓨鍦ㄧ被浼肩殑鏋勯犮傞氬父錛屼竴涓郴緇熷緱Application瀵硅薄鎴栬呮槸涓涓狢OM瀵硅薄錛屾垨鑰呮槸涓涓?NET瀵硅薄錛屽鏋滀綘鐨勭郴緇熷瓨鍦ㄨ繖綾誨璞★紝浣犵殑緋葷粺灝卞熀鏈叿澶囨敮鎸丄ddin銆丳lugin鐨勬満鍒朵簡銆備竴涓悊鎯崇殑鍋氭硶灝辨槸鍦ㄤ竴涓狹FC緋葷粺涓紝鍐呯疆涓涓狝TL瀵硅薄鎴?NET瀵硅薄錛岀◢鍚庢垜浠粰鍑烘柟妗堝浣曞仛鍒拌繖涓鐐廣傝璁pplication瀵硅薄鐨勫叧閿槸濡備綍瑙勫垝榪欎釜瀵硅薄鐨勫睘鎬с佹柟娉曘佷簨浠躲傚鏋滀綘甯屾湜緋葷粺鍏峰鑹ソ鐨勬墿灞曟э紝Application瀵硅薄鏄崄鍒嗗叧閿殑錛岃繖涔熸槸鏋勬灦鑹烘湳鐨勪綋鐜般傛墍璋揂ddin(Plugin)錛屾槸緋葷粺榪愯鏃舵牴鎹渶瑕佸姞杞界殑瀵硅薄搴擄紝Addin(Plugin)涔嬫墍浠ュ彲浠ユ墿灞曠郴緇燂紝鍏抽敭鐨勫洜绱犲氨鏄郴緇熷姞杞紸ddin(Plugin)鏃訛紝灝咥pplication瀵硅薄浼犻掔粰Addin(Plugin)搴擄紝璁炬兂涓涓嬶紝濡傛灉Application鎭板埌濂藉鐨勮Е鍙戜簡緋葷粺浜嬩歡錛岃孉ddin(Plugin)搴撳鎰跨殑瑙i噴浜嗕簨浠訛紝涓涓狝ddin(Plugin)搴撶殑浠誨姟涓嶅氨O(jiān)K浜嗗悧錛佸洜姝pplication瀵硅薄鏄郴緇熻璁$殑鍏抽敭銆?/p>

    銆銆濡傛灉浣犵簿閫欰TL瀵硅薄錛屽湪浣犵殑MFC緋葷粺涓坊鍔犱竴涓狝TL瀵硅薄錛岃繖涓換鍔″彲浠ョ敤VC Wizard瀹屾垚銆備綘宸茬粡鎺ュ彈浜嗕竴涓簨瀹烇紝灝辨槸MFC紼嬪簭涓瓨鍦ㄤ竴涓狢XXXApp瀵硅薄錛圕WinApp鐨勬淳鐢熺被錛夛紝鐜板湪浣犺鍋氱殑鏄鍔犱竴涓搴斿緱ATL瀵硅薄銆傝繖涓璞″彲浠ュ湪CXXXApp::InitInstance()涓垱寤猴紝濡傛灉ATL瀵硅薄鐨勭被鏄疌XXXAppObject錛屽緩璁綘鍦–XXXApp瀵硅薄瀵硅薄涓鍔犱竴涓垚鍛樺彉閲忥紝渚嬪錛欳ComObject<CXXXAppObject>* m_pAppObj錛岀劧鍚庡彲浠ュ叆涓嬪垵濮嬪寲m_pAppObj錛?/p>

    m_pAppObj = new CComObject<CXXXAppObject>錛?/p>

    銆銆娉ㄦ剰紼嬪簭緇撴潫鏃跺湪CXXXApp::ExitInstance()涓噴鏀緈_pAppObj錛岃鍙ュ涓嬶細(xì)

    delete m_pAppObj錛?/p>

    銆銆浣犲彲浠ュ皢緋葷粺寰楀叧閿睘鎬ц緗垚CXXXAppObject鐨勫睘鎬э紝渚嬪緋葷粺寰楁爣棰樸佹槸鍚︿負(fù)澶氭枃妗g瓑絳夈傜郴緇熷笇鏈涘閮ㄨ皟鐢ㄧ殑鍔熻兘鍙互瀹炵幇涓篊XXXAppObject鐨勬柟娉曪紝榪欎竴鐐瑰彇鍐充簬浣犵殑闇瑕併傜郴緇熼渶瑕佸閮ㄦ墿灞曠殑鍔熻兘錛岃〃鐜頒負(fù)CXXXAppObject鐨勪簨浠訛紝鍏抽敭鏄湪鎭板綋鐨勪綅緗Е鍙戜簨浠朵互鍙?qiáng)鎻愪緵鐨勪簨錃g鍙傛暟銆備緥濡傦紝浣犲彲浠ュ湪CXXXApp::InitInstance()瑙﹀彂搴旂敤紼嬪簭寮濮嬬殑浜嬩歡OnStartUp錛孭lugin鎹曡幏浜嬩歡鍚庯紝鍙互榪涜鐗瑰畾鐨勫垵濮嬪寲錛堣韓浠界‘璁ゃ佸垵濮嬩俊鎭煡璇㈢瓑絳夛級錛涗綘鍙互鍦–XXXApp::ExitInstance()瑙﹀彂搴旂敤紼嬪簭緇撴潫浜嬩歡錛孭lugin鎹曡幏浜嬩歡鍚庯紝澶勭悊鐢ㄦ埛闇瑕佺殑緋葷粺閫鍑哄伐浣溿傛墍鏈夌殑璁捐鍙栧喅浜庡叿浣撹璁°?/p>

    銆銆濡備綍鍔犺澆Plugin錛屾槸涓涓湁瓚g殑闂錛屽鏋淧lugin瀹炵幇涓轟竴涓狢OM鑼冪暣錛圕ategory錛夛紝鍙互榪愮敤COM鎶鏈灇涓捐繖涓狢ategory錛涘彲浠ュ皢Plugin瀹夎鍒頒竴涓壒瀹氱洰褰曪紝涔熷彲浠ラ氳繃娉ㄥ唽琛ㄣ侾lugin鐨勫疄鐜板彲浠ョ敤COM鎶鏈佷篃鍙互鐢?NET妗嗘灦銆傞傚綋鐨勬満浼?xì)鎴戜細(xì)鎻愪緵渚嬪瓙鈥︹?/p>

    鍏佸悗璁?/p>

    銆銆涓鏃跺績琛鏉ユ疆錛屽氨鍐欎簡榪欑瘒鏂囩珷錛屽緢闅捐鏄湁蹇冿紝榪樻槸鏃犳剰銆傚嚑澶╁墠鎴戝湪鏂版氮緗戜笂鐪嬪簲姘忔澂鍥存鍐寵禌錛屾垜瑙夊緱璇ヨ耽浜嗗惂錛屼綔涓轟竴涓洿媯嬭糠錛屾垜浠瓑浜嗗崄鍑犲勾錛岀瓑鍒頒簡灞炰簬鍥戒漢鐨勫簲姘忔澂銆傝寰?銆?騫村墠鍦ㄨ繕鍦ㄥぇ瀛﹀伐浣滅殑鏃跺欙紝鏈変竴嬈★紝涓浣嶅悓浜嬪叴鑷村啿鍐茬殑璧伴亾鎴戦潰鍓嶅鎴戣錛?鍡紝鏄ㄥぉ椹琗X璧簡鏉庢槍闀愶紒"錛屽綋鏃舵垜鍦ㄧ郴鍔炲叕瀹ゆ鍦ㄧ湅鎶ョ焊錛岄偅浣嶄粊鍏勮鎴戝ご閮芥病鎶紝闈炲父涓嶆弧鐨勬姠涓嬫姤綰革紝瀵規(guī)垜鍚奸亾錛?鍠傦紒椹琗X璧簡鏉庢槍闀愶紒錛佷綘鍚埌娌℃湁錛侊紒錛?錛屾垜瀵逛粬璇達(dá)細(xì)"浣犲ぇ鎯婂皬鎬釜鍟ワ紵錛侀┈XX杈撲簡鏉庢槍闀愬灝戠洏錛屼綘鐭ラ亾鍚楋紵"錛岄┈XX鍑犱箮涓鐩村湪杈撶粰鏉庢槍闀愶紝浜轟滑宸茬粡涓嶅鎬簡錛屽伓灝?dāng)璧竴嬈★紝鍥戒漢灝辨妸浠栨崸寰楀寳閮芥壘涓嶅埌浜嗭紝鏉庢槍闀愬急鍐?7鐨勬椂鍊欏氨鍌茶榪欎釜涓栫晫浜嗭紝鍙嚦浠婇潰瀛斾笉鍙橈紝鍑犲ぉ鍓嶇殑鍐滃績鏉紝涓棩鑱斿啗5涓漢錛岃浠栨墦涓惤鑺辨祦姘達(dá)紝鏉庢槍闀愭槸鍏鐨勪笘鐣岀涓錛屼互鑷充簬鏈夌殑楂樻墜鐭ラ亾涓嬩竴涓鎵嬪鏋滄槸浠栵紝灝變細(xì)鍘昏鍥炵▼鏈虹エ銆傝繖嬈″簲姘忔澂錛屽浗浜虹珶鐒舵劅璋㈠磾鍝茬氾紝浣曚篃錛熷洜涓鴻繖涓急鍐?9鐨勫皬瀛愶紝鎸′綇浜嗕粬鐨勫ぇ鍝ユ潕鏄岄晲鎵嶄嬌寰楀簲姘忔澂鏈変簡鎮(zhèn)康銆傚綋鍥戒漢濯掍綋鍦ㄨ闊╁浗浠呮潕鏄岄晲涓浜哄帀瀹崇殑鏃跺欙紝涓嶇煡閬撴槸鍑轟綍灞呭績榪樻槸鑷嬈轟漢錛屾潕鏄岄晲騫存柟30錛屼笉鐭ラ亾瑕佸姏鍘嬩腑銆佹棩澶氬皯騫達(dá)紒闈㈠榪欎釜鍚嶅瓧錛岀湡鏈夌偣楹繪湪浜嗭紝榪欎釜澶瀬铏庯紒

    銆銆杞歡鐣屽張鏉ヤ簡鎴戜滑涓鍚戜笉榻跨殑鍗板害铏庯紝2001騫存垜浠殑杞歡鍑哄彛棰濅粎鏄嵃搴︾殑鍥涘崄鍒嗕箣涓錛屾垜浠渿鎯婁簡錛屾庝箞鍙兘鍛紵榪欎釜鍥涘崄鍒嗕箣涓姘村垎寰堝ぇ錛屽緢鍙兘鏇村彲鎬滐紒褰撴椂鎴戝湪澶ц繛鍙傚姞涓涓叧浜?澶ц繛杞歡鍑哄彛鍥藉唴絎竴"鐨勫畼鏂逛細(xì)璁紝閭d綅澶т漢鍦ㄤ細(xì)涓婅錛?鎹錛屾垜浠ぇ榪炶蔣浠跺嚭鍙e浗鍐呮帓鍚嶇涓錛屽競鏈夊叧棰嗗甯屾湜浠婂ぉ鐨勪細(xì)璁粰鍑鴻繖涓涓鐨勬暟瀛椾緷鎹紝甯屾湜浣犱滑鎶婃暟鎹姤涓婃潵錛屽幓騫寸殑鏁版嵁涔熷彲鐢蟲姤錛屾敞鎰忥紝鎴戜滑瑕佺殑鍙槸鏁版嵁錛屼綘浠粩緇嗕綋浼?xì)锛屾垜浠犚?guī)嵁鏁版嵁錛屾湁濂栧姳錛屾満浼?xì)闅惧緱鍛錛?鈥︹︺傛煇涓澶╋紝鍑犱釜鏈嬪弸鍦ㄦ垜瀹剁湅澶鐨勫璇濊妭鐩紝瀵硅瘽涓鏂逛負(fù)鍥藉唴鐨勮蔣浠跺ぇ槌勪滑錛堢敤鍙嬨侀樋灝?dāng)娲窘{夊叕鍙哥殑鑰佹諱滑錛夛紝鍙︿竴鏂逛負(fù)鍗板害杞歡鐨勪竴涓唬琛ㄥ洟銆傚綋闂強(qiáng)涓佸嵃杞歡宸窛鐨勬椂鍊欙紝鎴戜滑鐨勫垬鑰佹伙紙浠h〃闃垮皵媧撅級涓嶄互涓虹劧鐨勮錛屾嵁浠栫殑鐪嬫硶錛屾垜浠凡緇忓揩璧朵笂錛堝嵃搴︼級浜嗭紝鈥︹︼紝璦涓嬩箣鎰忛鏈夊嵃搴︾殑姘村鉤涓嶈繃濡傛鐨勬劅瑙夛紝鍗板害鏂圭殑璇濇垜鑷充粖璁板繂鐘規(guī)柊錛?鏄惁璧朵笂錛屽浗闄呭競鍦鴻鐨勭畻錛佸湪涓浗鐪嬫潵錛屽嵃搴︾▼搴忓憳鐨勪釜鎬т笉瓚籌紝鎶鏈篃涓嶆庝箞鏍鳳紝鍏跺疄鏄釜閿欒錛屽嵃搴﹁蔣浠墮鍏堟敞閲嶄釜鎬э紝璁稿閲嶈鐨勭編鍥藉晢鍝佸寲杞歡閮芥槸鍦ㄥ嵃搴︽湰鍦熷紑鍙戠殑鈥︹?錛屾垜浠殑鑸嗚鎬繪槸灝嗗嵃搴︾▼搴忓憳鐨勬按騫蟲弿榪扮殑騫沖焊鑷蟲瀬錛屽彲鏄樊璺濇棩娓愭媺寮錛屸︹︼紝鍥存銆佽凍鐞冿紙涓嶅ソ鎰忔濊皥錛岃皥涓嶅嚭鍙o紒錛夈佽蔣浠訛紝鎴戜滑琚繎閭諱弗閰風(fēng)殑灝侀攣浜嗭紝涔愬潖浜嗚鑰呬滑銆佺粰濯掍綋甯︽潵浜嗙敓鏈衡︹?

    銆銆鏃ユ湰姹熸埛鏃朵唬鐨勫洿媯嬶紝濡傛灉涓涓漢瑕佹兂涓栬涓涓О鍙鳳紙渚嬪錛氭湰鍥犲潑錛夛紝浠栧繀欏繪垬鑳滄墍鏈夌殑甯堝厔寮燂紝鐒跺悗錛屼綇榪涘笀鐖跺鐨勫唴瀹わ紝浣犵煡閬撲互鍚庣殑浜嬫儏鍚楋紵浠ュ悗錛岃繖涓鎵嬶紝灝卞緱涓哄笀鐖朵竴瀹跺仛楗佸甫瀛╁瓙銆佹悶鍗敓鈥︹︼紝鍏朵綑鐨勯棬浜哄垯涓蹇冧竴鎰忕殑涓嬫錛岃繖鏍風(fēng)殑浜恒佹柟寮忥紝閫犲氨浜嗕竴浠d竴浠g殑鏈洜鍧婏紝浠栦滑鐨勬璋卞ぇ澶氭暟閮芥祦鑺寵嚦浠婏紝榪欏氨鏄棭鏈熸棩鏈洿媯嬬殑鎮(zhèn)熼亾妯″紡銆傝蔣浠舵誨叡鏈夊灝戣鍙ワ紵鎴戞渶鏃╂帴瑙︾殑璁$畻鏈鴻蔣浠舵暀鏉愭槸涓鏈嫳鏂囩増鐨勶紙褰卞嵃鐨凞鐗堬級錛屼笉鍚屼簬鎴戜滑錛岄偅鏈功鐨勪綔鑰呮瀯閫犱簡"X-璇█"錛屼粬浠笉璁蹭粈涔圕銆丳ascal銆丅asic錛屼竴鏃︾己浜嗕粈涔堟満鍒訛紝灝辯粰"X-璇█"娣誨姞浜涙垚鍒嗐備粈涔圕銆丳ascal銆丅asic錛屼綘鎰熻宸笉澶氾紝浣嗙幇鍦ㄥ嵈鍒嗗嚭浜嗙瓑綰э紒鎴戜滑椹鵑┉璇█鐨勮兘鍔涘急寰楀緢錛屽彲鏄垜浠湪璇█鐨勭粏寰箣澶勫嵈寰堣絀訛紝涓嶇煡閬撳涓嶅錛岃澶氱▼搴忓憳涔熻鏄嚭浜庤櫄鑽h岀敤C++錛屼簨瀹炰笂錛屽湴鐞冧漢鍒扮煡閬擄紝鍋氭暟鎹簱錛孌elphi銆乂B榪滄瘮C++鑳滀換錛岄摵澶╃洊鍦扮殑C++鐨勪功錛屽啓鐨勪笢瑗垮嚑涔庨浄鍚岋紝鍥犱負(fù)錛屾湁鐢ㄧ殑鎴栬呬綔鑰呬笉鍐欍佹垨鑰呬綔鑰呬笉鎳傘傛湁鏃舵垜鍦ㄦ兂錛屽鏋滃浗鍐呮病鏈夊唴闇錛屼細(xì)鎬庢牱錛熶篃璁歌蔣浠跺唴闇鐨勫瓨鍦紝閫犲氨浜嗕腑鍥借蔣浠剁殑鐗硅壊錛屾垜璁や負(fù)鍥藉唴涓氱晫騫舵病鏈夊厖鍒嗗埄鐢ㄤ腑鍥借蔣浠跺唴闇鐨勫瓨鍦紝涔熻涓浗杞歡鍐呴渶鐨勫瓨鍦ㄦ槸杞歡钀藉悗鐨勭‖浼ゃ?/p>

    銆銆鎴戣寰椾竴閮ㄧ數(shù)褰便婄杈嬶紝閭d釜鑻遍泟鐨勫ぇ杈瓙琚磱浜虹偢鎺変簡錛屾渶緇堜粬鎴愪簡紲炴灙鎵嬶紝鎴樿儨媧嬩漢鐢ㄥぇ鍒銆佺綾嶆槸涓嶈鐨勶紝鐢ㄦ磱鐨勪笢瑗挎垬鑳滄磱鐨勬妧鏈墠鏄閬撱傛垜瑙夊緱錛屼竴涓ソ鐨勭▼搴忓憳蹇呴』浜嗚В杞歡鐨勫巻鍙詫紝瀛︿範(fàn)鍘嗗彶錛屼綘鐭ラ亾浣犱負(fù)浠涔堝急錛屽埆浜烘槸濡備綍寮哄ぇ鐨勩傛垜浠鍦ㄥ彟涓涓垬鍦轟笂鎶楃編錛堝彲絎戠殑鏄垜浠嵈瑕佽刀瓚呭嵃搴︼紒錛夛紝鏃犺Microsoft銆丅orland濡備綍浜夋枟錛屾棤璁轟粬浠皝緇熸不璋侊紝浠栦滑涓嶅獎鍝嶇編鍥界殑寮哄ぇ錛屾湅鍙嬩滑錛屽涔?fàn)Microsoft錛屽紑鍙戝嚭璁╁浗浜烘劅鍒扮墰鐨勮蔣浠訛紒



    volnet 2006-12-04 22:05 鍙戣〃璇勮
    ]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲韩国日本中文字幕| 久久国产精彩视频| 在线不卡中文字幕| 91久久精品国产91久久性色tv| 亚洲午夜免费视频| av成人激情| 国产精品一页| 免费观看在线综合色| 久久综合给合| 亚洲视频在线二区| 欧美一级视频| 亚洲区在线播放| 亚洲视屏在线播放| 国内久久精品| 亚洲靠逼com| 国产午夜精品久久| 亚洲国产精品一区二区第一页| 欧美色图五月天| 久久综合影音| 欧美日韩免费观看一区三区| 欧美一区二区高清在线观看| 老色鬼精品视频在线观看播放| 一本久久青青| 久久久久欧美| 亚洲欧美一区二区激情| 久久久夜色精品亚洲| 亚洲无人区一区| 另类天堂av| 久久国产精品电影| 欧美日韩精品福利| 欧美~级网站不卡| 国产精品久久久久久久久久免费 | 久久激情网站| 宅男精品视频| 欧美**人妖| 久久久无码精品亚洲日韩按摩| 欧美日韩视频第一区| 蜜臀久久久99精品久久久久久| 国产精品久久国产三级国电话系列| 免费在线国产精品| 国产欧美日韩不卡| 在线亚洲一区观看| 99精品国产一区二区青青牛奶| 欧美在线视屏| 久久高清一区| 国产热re99久久6国产精品| 亚洲黄色在线视频| 在线播放不卡| 久久激情久久| 久久久女女女女999久久| 国产精品久久久久久久午夜| 亚洲人久久久| 99re热这里只有精品视频| 麻豆久久精品| 欧美激情精品久久久久久蜜臀| 韩日精品中文字幕| 欧美一区在线看| 久久经典综合| 国产一区久久| 久久精品二区三区| 麻豆免费精品视频| 在线免费观看一区二区三区| 久久久www成人免费精品| 久久www成人_看片免费不卡| 欧美一区二区三区日韩| 国产精品乱人伦中文| 中文在线资源观看网站视频免费不卡| 亚洲精品国产精品国自产在线 | 国产精品一国产精品k频道56| 91久久国产综合久久| 亚洲美女精品久久| 欧美区在线播放| 一本色道久久加勒比88综合| 国产精品99久久久久久久女警| 欧美色道久久88综合亚洲精品| 夜久久久久久| 久久成人精品| 亚洲福利视频网站| 欧美人与性动交a欧美精品| 亚洲伦伦在线| 欧美一二三区精品| 国自产拍偷拍福利精品免费一| 久久精品五月| 亚洲人体大胆视频| 欧美一区精品| 91久久精品一区二区三区| 欧美日韩精品久久| 欧美一区二区三区四区夜夜大片 | 中国av一区| 国产日韩视频一区二区三区| 久久久女女女女999久久| 亚洲国产aⅴ天堂久久| 亚洲一区二区三区国产| 国产在线精品自拍| 欧美精品亚洲| 久久成人精品| 亚洲裸体视频| 久久夜色精品国产亚洲aⅴ| 日韩视频专区| 国产一区在线免费观看| 欧美精品亚洲精品| 久久精品国产成人| 99国产欧美久久久精品| 毛片精品免费在线观看| 亚洲网站在线| 亚洲区一区二区三区| 国产日韩精品久久| 欧美日韩免费精品| 免费不卡亚洲欧美| 香蕉久久国产| 夜夜嗨av一区二区三区网页| 美日韩丰满少妇在线观看| 亚洲网站在线播放| 亚洲精品之草原avav久久| 国模精品娜娜一二三区| 欧美亚州韩日在线看免费版国语版| 玖玖国产精品视频| 欧美专区日韩专区| 久久成人免费视频| 欧美日一区二区在线观看| 久久一区二区视频| 亚洲欧美日韩国产| 日韩亚洲欧美成人一区| 在线免费观看欧美| 国内精品久久久久影院色| 国产精品久久久久久久第一福利| 欧美激情成人在线| 美女网站久久| 欧美中文在线观看| 亚洲高清在线播放| 国产综合色在线| 国产一区二区三区在线播放免费观看 | 亚洲综合国产精品| 亚洲无线观看| 亚洲午夜激情网站| 在线一区二区三区四区| 亚洲卡通欧美制服中文| 91久久精品一区二区别| 最新精品在线| 亚洲精品日韩在线| 99精品国产热久久91蜜凸| 亚洲日本aⅴ片在线观看香蕉| 亚洲国产另类久久精品| 一本到高清视频免费精品| 亚洲无吗在线| 欧美理论电影在线观看| 99国产精品久久| 一区二区三区高清不卡| 亚洲视频在线观看网站| 亚洲视频一区| 小辣椒精品导航| 久久久亚洲高清| 欧美1级日本1级| 欧美日韩国产精品一卡| 国产精品国产三级欧美二区| 国产精品国产三级国产aⅴ入口| 国产精品丝袜久久久久久app| 国产一区二区三区免费观看 | 欧美在线短视频| 久热国产精品| 欧美三级日韩三级国产三级| 国产精品日韩一区二区| 国产亚洲高清视频| 亚洲国产精品久久91精品| 一二美女精品欧洲| 欧美在线资源| 99在线精品免费视频九九视| 欧美激情一区在线观看| 最新日韩精品| 久久久久久**毛片大全| 亚洲欧美一区二区原创| 久久精品国产精品亚洲| 欧美第一黄网免费网站| 99re6这里只有精品| 性欧美精品高清| 欧美电影免费观看| 国产精品美女一区二区在线观看| 国内精品久久久久久久影视蜜臀| 亚洲国产裸拍裸体视频在线观看乱了| 99ri日韩精品视频| 久久久久国产一区二区三区四区 | 午夜激情综合网| 欧美成人中文字幕| 亚洲一二三级电影| 欧美 日韩 国产精品免费观看| 国产精品国产自产拍高清av| 在线观看视频一区二区欧美日韩| 一本大道久久a久久综合婷婷| 亚洲欧美日韩人成在线播放| 欧美三级中文字幕在线观看| 国产精品综合| 在线欧美视频| 久久精品导航| 在线中文字幕不卡| 牛人盗摄一区二区三区视频| 国产日韩久久| 午夜宅男久久久| 一区二区免费看| 国产精品影片在线观看| 国产精品99久久久久久久vr|