锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久手机免费观看,午夜在线不卡,国产精品hdhttp://m.shnenglu.com/Walker/category/15672.html鍏堝浼氳漿鏂囩珷錛屽湪浠旂粏璇繪枃绔狅紝鏈鍚庤嚜宸卞啓鐐逛笢瑗?.......zh-cnSun, 01 Apr 2012 04:38:49 GMTSun, 01 Apr 2012 04:38:49 GMT60How to: Convert Between Various String Typeshttp://m.shnenglu.com/Walker/articles/147908.html婕鑰吤?amp;鈥︹?錕?/dc:creator>婕鑰吤?amp;鈥︹?錕?/author>Wed, 01 Jun 2011 22:43:00 GMThttp://m.shnenglu.com/Walker/articles/147908.htmlhttp://m.shnenglu.com/Walker/comments/147908.htmlhttp://m.shnenglu.com/Walker/articles/147908.html#Feedback0http://m.shnenglu.com/Walker/comments/commentRss/147908.htmlhttp://m.shnenglu.com/Walker/services/trackbacks/147908.htmlhttp://msdn.microsoft.com/en-us/library/ms235631.aspx
// convert_from_char.cpp
// compile with: /clr /link comsuppw.lib

#include <iostream>
#include <stdlib.h>
#include <string>

#include "atlbase.h"
#include "atlstr.h"
#include "comutil.h"

using namespace std;
using namespace System;

int main()
{
    // Create and display a C style string, and then use it 
    // to create different kinds of strings.
    char *orig = "Hello, World!";
    cout << orig << " (char *)" << endl;

    // newsize describes the length of the 
    // wchar_t string called wcstring in terms of the number 
    // of wide characters, not the number of bytes.
    size_t newsize = strlen(orig) + 1;

    // The following creates a buffer large enough to contain 
    // the exact number of characters in the original string
    // in the new format. If you want to add more characters
    // to the end of the string, increase the value of newsize
    // to increase the size of the buffer.
    wchar_t * wcstring = new wchar_t[newsize];

    // Convert char* string to a wchar_t* string.
    size_t convertedChars = 0;
    mbstowcs_s(&convertedChars, wcstring, newsize, orig, _TRUNCATE);
    // Display the result and indicate the type of string that it is.
    wcout << wcstring << _T(" (wchar_t *)") << endl;

    // Convert the C style string to a _bstr_t string.
    _bstr_t bstrt(orig);
    // Append the type of string to the new string
    // and then display the result.
    bstrt += " (_bstr_t)";
    cout << bstrt << endl;

    // Convert the C style string to a CComBSTR string.
    CComBSTR ccombstr(orig);
    if (ccombstr.Append(_T(" (CComBSTR)")) == S_OK)
    {
        CW2A printstr(ccombstr);
        cout << printstr << endl;
    }

    // Convert the C style string to a CstringA and display it.
    CStringA cstringa(orig);
    cstringa += " (CStringA)";
    cout << cstringa << endl;

    // Convert the C style string to a CStringW and display it.
    CStringW cstring(orig);
    cstring += " (CStringW)";
    // To display a CStringW correctly, use wcout and cast cstring
    // to (LPCTSTR).
    wcout << (LPCTSTR)cstring << endl;

    // Convert the C style string to a basic_string and display it.
    string basicstring(orig);
    basicstring += " (basic_string)";
    cout << basicstring << endl;

    // Convert the C style string to a System::String and display it.
    String ^systemstring = gcnew String(orig);
    systemstring += " (System::String)";
    Console::WriteLine("{0}", systemstring);
    delete systemstring;
}

Output

Hello, World! (char *)
Hello, World! (wchar_t *)
Hello, World! (_bstr_t)
Hello, World! (CComBSTR)
Hello, World! (CStringA)
Hello, World! (CStringW)
Hello, World! (basic_string)
Hello, World! (System::String)


]]>
瀛楃緙栫爜http://m.shnenglu.com/Walker/articles/147443.html婕鑰吤?amp;鈥︹?錕?/dc:creator>婕鑰吤?amp;鈥︹?錕?/author>Fri, 27 May 2011 14:54:00 GMThttp://m.shnenglu.com/Walker/articles/147443.htmlhttp://m.shnenglu.com/Walker/comments/147443.htmlhttp://m.shnenglu.com/Walker/articles/147443.html#Feedback0http://m.shnenglu.com/Walker/comments/commentRss/147443.htmlhttp://m.shnenglu.com/Walker/services/trackbacks/147443.html鍏充簬瀛楃緙栫爜錛屼綘鎵闇瑕佺煡閬撶殑

 

瀛楃緙栫爜鐨勯棶棰樼湅浼煎緢灝忥紝緇忓父琚妧鏈漢鍛樺拷瑙嗭紝浣嗘槸寰堝鏄撳鑷翠竴浜涜帿鍚嶅叾濡欑殑闂銆傝繖閲屾葷粨浜嗕竴涓嬪瓧絎︾紪鐮佺殑涓浜涙櫘鍙婃х殑鐭ヨ瘑錛屽笇鏈涘澶у鏈夋墍甯姪銆?/p>

榪樻槸寰椾粠ASCII鐮佽璧?/h2>

 

璇村埌瀛楃緙栫爜錛屼笉寰椾笉璇碅SCII鐮佺殑綆鍙層傝綆楁満涓寮濮嬪彂鏄庣殑鏃跺欐槸鐢ㄦ潵瑙e喅鏁板瓧璁$畻鐨勯棶棰橈紝鍚庢潵浜轟滑鍙戠幇錛岃綆楁満榪樺彲浠ュ仛鏇村鐨勪簨錛屼緥濡傛枃鏈鐞嗐備絾鐢變簬璁$畻鏈哄彧璇?#8220;鏁?#8221;錛屽洜姝や漢浠繀欏誨憡璇夎綆楁満鍝釜鏁板瓧鏉ヤ唬琛ㄥ摢涓壒瀹氬瓧絎︼紝渚嬪65浠h〃瀛楁瘝‘A’錛?6浠h〃瀛楁瘝‘B’錛屼互姝ょ被鎺ㄣ備絾鏄?strong>璁$畻鏈轟箣闂村瓧絎?鏁板瓧鐨勫搴斿叧緋誨繀欏誨緱涓鑷達紝鍚﹀垯灝變細閫犳垚鍚屼竴孌墊暟瀛楀湪涓嶅悓璁$畻鏈轟笂鏄劇ず鍑烘潵鐨勫瓧絎︿笉涓鏍?/span>銆傚洜姝ょ編鍥藉浗瀹舵爣鍑嗗崗浼欰NSI鍒跺畾浜嗕竴涓爣鍑嗭紝瑙勫畾浜嗗父鐢ㄥ瓧絎︾殑闆嗗悎浠ュ強姣忎釜瀛楃瀵瑰簲鐨勭紪鍙鳳紝榪欏氨鏄疉SCII瀛楃闆嗭紙Character Set錛夛紝涔熺ОASCII鐮併?/p>

褰撴椂鐨勮綆楁満鏅亶浣跨敤8姣旂壒瀛楄妭浣滀負鏈灝忕殑瀛樺偍鍜屽鐞嗗崟鍏冿紝鍔犱箣褰撴椂鐢ㄥ埌鐨勫瓧絎︿篃寰堝皯錛?6涓ぇ灝忓啓鑻辨枃瀛楁瘝榪樻湁鏁板瓧鍐嶅姞涓婂叾浠栧父鐢ㄧ鍙鳳紝涔熶笉鍒?00涓紝鍥犳浣跨敤7涓瘮鐗逛綅灝卞彲浠ラ珮鏁堢殑瀛樺偍鍜屽鐞咥SCII鐮侊紝鍓╀笅鏈楂樹綅1姣旂壒琚敤浣滀竴浜涢氳緋葷粺鐨勫鍋舵牎楠屻?/p>

娉ㄦ剰錛屽瓧鑺備唬琛ㄧ郴緇熻兘澶熷鐞嗙殑鏈灝忓崟浣嶏紝涓嶄竴瀹氭槸8姣旂壒銆傚彧鏄幇浠h綆楁満鐨勪簨瀹炴爣鍑嗗氨鏄敤8姣旂壒鏉ヤ唬琛ㄤ竴涓瓧鑺傘傚湪寰堝鎶鏈鏍兼枃鐚腑錛屼負浜嗛伩鍏嶄駭鐢熸涔夛紝鏇村懼悜浜庝嬌鐢?浣嶇粍錛圤ctet錛夎屼笉鏄瓧鑺傦紙Byte錛夎繖涓湳璇潵寮鴻皟8涓瘮鐗圭殑浜岃繘鍒舵祦銆備笅鏂囦腑涓轟簡渚夸簬鐞嗚В錛屾垜浼氬歡鐢ㄥぇ瀹剁啛鎮夌殑“瀛楄妭”榪欎釜姒傚康銆?/p>

ASCII table

ASCII瀛楃闆嗙敱95涓彲鎵撳嵃瀛楃錛?x20-0x7E錛夊拰33涓帶鍒跺瓧絎︼紙0x00-0x19錛?x7F錛夌粍鎴愩傚彲鎵撳嵃瀛楃鐢ㄤ簬鏄劇ず鍦ㄨ緭鍑鴻澶囦笂錛屼緥濡傝崸灞忔垨鑰呮墦鍗扮焊涓婏紝鎺у埗瀛楃鐢ㄤ簬鍚戣綆楁満鍙戝嚭涓浜涚壒孌婃寚浠わ紝渚嬪0x07浼氳璁$畻鏈哄彂鍑哄摂鐨勪竴澹幫紝0x00閫氬父鐢ㄤ簬鎸囩ず瀛楃涓茬殑緇撴潫錛?x0D鍜?x0A鐢ㄤ簬鎸囩ず鎵撳嵃鏈虹殑鎵撳嵃閽堝ご閫鍒拌棣栵紙鍥炶濺錛夊茍縐誨埌涓嬩竴琛岋紙鎹㈣錛夈?/p>

閭f椂鍊欑殑瀛楃緙栬В鐮佺郴緇熼潪甯哥畝鍗曪紝灝辨槸綆鍗曠殑鏌ヨ〃榪囩▼銆備緥濡傚皢瀛楃搴忓垪緙栫爜涓轟簩榪涘埗嫻佸啓鍏ュ瓨鍌ㄨ澶囷紝鍙渶瑕佸湪ASCII瀛楃闆嗕腑渚濇鎵懼埌瀛楃瀵瑰簲鐨勫瓧鑺傦紝鐒跺悗鐩存帴灝嗚瀛楄妭鍐欏叆瀛樺偍璁懼鍗沖彲銆傝В鐮佷簩榪涘埗嫻佺殑榪囩▼涔熸槸綾諱技銆?/p>

OEM瀛楃闆嗙殑琛嶇敓

褰撹綆楁満寮濮嬪彂灞曡搗鏉ョ殑鏃跺欙紝浜轟滑閫愭笎鍙戠幇錛孉SCII瀛楃闆嗛噷閭e彲鎬滅殑128涓瓧絎﹀凡緇忎笉鑳藉啀婊¤凍浠栦滑鐨勯渶姹備簡銆備漢浠氨鍦ㄦ兂錛屼竴涓瓧鑺傝兘澶熻〃紺虹殑鏁板瓧錛堢紪鍙鳳級鏈?56涓紝鑰孉SCII瀛楃鍙敤鍒頒簡0x00~0x7F錛屼篃灝辨槸鍗犵敤浜嗗墠128涓紝鍚庨潰128涓暟瀛椾笉鐢ㄧ櫧涓嶇敤錛屽洜姝ゅ緢澶氫漢鎵撹搗浜嗗悗闈㈣繖128涓暟瀛楃殑涓繪剰銆傚彲鏄棶棰樺湪浜庯紝寰堝浜哄悓鏃舵湁榪欐牱鐨勬兂娉曪紝浣嗘槸澶у瀵逛簬0x80-0xFF榪欏悗闈㈢殑128涓暟瀛楀垎鍒搴斾粈涔堟牱鐨勫瓧絎︼紝鍗存湁鍚勮嚜鐨勬兂娉曘傝繖灝卞鑷翠簡褰撴椂閿寰涓栫晫鍚勫湴鐨勬満鍣ㄤ笂鍑虹幇浜嗗ぇ閲忓悇寮忓悇鏍風殑OEM瀛楃闆嗐?/p>

涓嬮潰榪欏紶琛ㄦ槸IBM-PC鏈烘帹鍑虹殑鍏朵腑涓涓狾EM瀛楃闆嗭紝瀛楃闆嗙殑鍓?28涓瓧絎﹀拰ASCII瀛楃闆嗙殑鍩烘湰涓鑷達紙涓轟粈涔堣鍩烘湰涓鑷村憿錛屾槸鍥犱負鍓?2涓帶鍒跺瓧絎﹀湪鏌愪簺鎯呭喌涓嬩細琚獻BM-PC鏈哄綋浣滃彲鎵撳嵃瀛楃瑙i噴錛夛紝鍚庨潰128涓瓧絎︾┖闂村姞鍏ヤ簡涓浜涙媧插浗瀹剁敤鍒扮殑閲嶉煶瀛楃錛屼互鍙婁竴浜涚敤浜庣敾綰挎潯鐢葷殑瀛楃銆?/p>

IBM-PC OEM瀛楃闆? src=

浜嬪疄涓婏紝澶ч儴鍒哋EM瀛楃闆嗘槸鍏煎ASCII瀛楃闆嗙殑錛屼篃灝辨槸璇達紝澶у瀵逛簬0x00~0x7F榪欎釜鑼冨洿鐨勮В閲婂熀鏈槸鐩稿悓鐨勶紝鑰屽浜庡悗鍗婇儴鍒?x80~0xFF鐨勮В閲婂嵈涓嶄竴瀹氱浉鍚屻傜敋鑷蟲湁鏃跺欏悓鏍風殑瀛楃鍦ㄤ笉鍚孫EM瀛楃闆嗕腑瀵瑰簲鐨勫瓧鑺備篃鏄笉鍚岀殑銆?/p>

涓嶅悓鐨凮EM瀛楃闆嗗鑷翠漢浠棤娉曡法鏈哄櫒浜ゆ祦鍚勭鏂囨。銆備緥濡傝亴鍛樼敳鍙戜簡涓灝佺畝鍘唕ésumés緇欒亴鍛樹箼錛岀粨鏋滆亴鍛樹箼鐪嬪埌鐨勫嵈鏄痳讙sum讙s錛屽洜涓?#233;瀛楃鍦ㄨ亴鍛樼敳鏈哄櫒涓婄殑OEM瀛楃闆嗕腑瀵瑰簲鐨勫瓧鑺傛槸0x82錛岃屽湪鑱屽憳涔欑殑鏈哄櫒涓婏紝鐢變簬浣跨敤鐨凮EM瀛楃闆嗕笉鍚岋紝瀵?x82瀛楄妭瑙g爜鍚庡緱鍒扮殑瀛楃鍗存槸讙銆?/p>

澶氬瓧鑺傚瓧絎﹂泦錛圡BCS錛夊拰涓枃瀛楃闆?/h2>

涓婇潰鎴戜滑鎻愬埌鐨勫瓧絎﹂泦閮芥槸鍩轟簬鍗曞瓧鑺傜紪鐮侊紝涔熷氨鏄錛屼竴涓瓧鑺傜炕璇戞垚涓涓瓧絎︺傝繖瀵逛簬鎷変竵璇郴鍥藉鏉ヨ鍙兘娌℃湁浠涔堥棶棰橈紝鍥犱負浠栦滑閫氳繃鎵╁睍絎?涓瘮鐗癸紝灝卞彲浠ュ緱鍒?56涓瓧絎︿簡錛岃凍澶熺敤浜嗐備絾鏄浜庝簹媧插浗瀹舵潵璇達紝256涓瓧絎︽槸榪滆繙涓嶅鐢ㄧ殑銆傚洜姝よ繖浜涘浗瀹剁殑浜轟負浜嗙敤涓婄數鑴戯紝鍙堣淇濇寔鍜孉SCII瀛楃闆嗙殑鍏煎錛屽氨鍙戞槑浜嗗瀛楄妭緙栫爜鏂瑰紡錛岀浉搴旂殑瀛楃闆嗗氨縐頒負澶氬瓧鑺傚瓧絎﹂泦銆備緥濡備腑鍥戒嬌鐢ㄧ殑灝辨槸鍙屽瓧鑺傚瓧絎﹂泦緙栫爜錛圖BCS錛孌ouble Byte Character Set錛夈?/p>

瀵逛簬鍗曞瓧鑺傚瓧絎﹂泦鏉ヨ錛屼唬鐮侀〉涓彧闇瑕佹湁涓寮犵爜琛ㄥ嵆鍙紝涓婇潰璁板綍鐫256涓暟瀛椾唬琛ㄧ殑瀛楃銆傜▼搴忓彧闇瑕佸仛綆鍗曠殑鏌ヨ〃鎿嶄綔灝卞彲浠ュ畬鎴愮紪瑙g爜鐨勮繃紼嬨?/p>

浠g爜欏墊槸瀛楃闆嗙紪鐮佺殑鍏蜂綋瀹炵幇錛屼綘鍙互鎶婁粬鐞嗚В涓轟竴寮?#8220;瀛楃-瀛楄妭”鏄犲皠琛紝閫氳繃鏌ヨ〃瀹炵幇“瀛楃-瀛楄妭”鐨勭炕璇戙備笅闈細鏈夋洿璇︾粏鐨勬弿榪般?/p>

鑰屽浜庡瀛楄妭瀛楃闆嗭紝浠g爜欏典腑閫氬父浼氭湁寰堝鐮佽〃銆傞偅涔堢▼搴忔庝箞鐭ラ亾璇ヤ嬌鐢ㄥ摢寮犵爜琛ㄥ幓瑙g爜浜岃繘鍒舵祦鍛紵絳旀鏄紝鏍規嵁絎竴涓瓧鑺傛潵閫夋嫨涓嶅悓鐨勭爜琛ㄨ繘琛岃В鏋?/span>銆?/p>

渚嬪鐩墠鏈甯哥敤鐨勪腑鏂囧瓧絎﹂泦GB2312錛屾兜鐩栦簡鎵鏈夌畝浣撳瓧絎︿互鍙婁竴閮ㄥ垎鍏朵粬瀛楃錛汫BK錛圞浠h〃鎵╁睍鐨勬剰鎬濓級鍒欏湪GB2312鐨勫熀紜涓婂姞鍏ヤ簡瀵圭箒浣撳瓧絎︾瓑鍏朵粬闈炵畝浣撳瓧絎︼紙GB18030瀛楃闆嗕笉鏄弻瀛楄妭瀛楃闆嗭紝鎴戜滑鍦ㄨUnicode鐨勬椂鍊欎細鎻愬埌錛夈傝繖涓や釜瀛楃闆嗙殑瀛楃閮芥槸浣跨敤1-2涓瓧鑺傛潵琛ㄧず銆俉indows緋葷粺閲囩敤936浠g爜欏墊潵瀹炵幇瀵笹BK瀛楃闆嗙殑緙栬В鐮併傚湪瑙f瀽瀛楄妭嫻佺殑鏃跺欙紝濡傛灉閬囧埌瀛楄妭鐨勬渶楂樹綅鏄?鐨勮瘽錛岄偅涔堝氨浣跨敤936浠g爜欏典腑鐨勭1寮犵爜琛ㄨ繘琛岃В鐮侊紝榪欏氨鍜屽崟瀛楄妭瀛楃闆嗙殑緙栬В鐮佹柟寮忎竴鑷翠簡銆?/p>

image

褰撳瓧鑺傜殑楂樹綅鏄?鐨勬椂鍊欙紝紜垏鐨勮錛屽綋絎竴涓瓧鑺備綅浜?x81–0xFE涔嬮棿鏃訛紝鏍規嵁絎竴涓瓧鑺備笉鍚屾壘鍒頒唬鐮侀〉涓殑鐩稿簲鐨勭爜琛紝渚嬪褰撶涓涓瓧鑺傛槸0x81錛岄偅涔堝搴?36涓殑涓嬮潰榪欏紶鐮佽〃錛?/code>

image

錛堝叧浜?36浠g爜欏典腑瀹屾暣鐨勭爜琛ㄤ俊鎭紝鍙傝MSDN錛?a >http://msdn.microsoft.com/en-us/library/cc194913%28v=MSDN.10%29.aspx.錛?/p>

鎸夌収936浠g爜欏電殑鐮佽〃錛屽綋紼嬪簭閬囧埌榪炵畫瀛楄妭嫻?x81 0x40鐨勬椂鍊欙紝灝變細瑙g爜涓?#8220;涓?#8221;瀛楃銆?

ANSI鏍囧噯銆佸浗瀹舵爣鍑嗐両SO鏍囧噯

涓嶅悓ASCII琛嶇敓瀛楃闆嗙殑鍑虹幇錛岃鏂囨。浜ゆ祦鍙樺緱闈炲父鍥伴毦錛屽洜姝ゅ悇縐嶇粍緇囬兘闄嗙畫榪涜浜嗘爣鍑嗗寲嫻佺▼銆備緥濡傜編鍥紸NSI緇勭粐鍒跺畾浜咥NSI鏍囧噯瀛楃緙栫爜錛堟敞鎰忥紝鎴戜滑鐜板湪閫氬父璇村埌ANSI緙栫爜錛岄氬父鎸囩殑鏄鉤鍙扮殑榛樿緙栫爜錛屼緥濡傝嫳鏂囨搷浣滅郴緇熶腑鏄疘SO-8859-1錛屼腑鏂囩郴緇熸槸GBK錛夛紝ISO緇勭粐鍒跺畾鐨勫悇縐岻SO鏍囧噯瀛楃緙栫爜錛岃繕鏈夊悇鍥戒篃浼氬埗瀹氫竴浜涘浗瀹舵爣鍑嗗瓧絎﹂泦錛屼緥濡備腑鍥界殑GBK錛孏B2312鍜孏B18030銆?/p>

鎿嶄綔緋葷粺鍦ㄥ彂甯冪殑鏃跺欙紝閫氬父浼氬線鏈哄櫒閲岄瑁呰繖浜涙爣鍑嗙殑瀛楃闆嗚繕鏈夊鉤鍙頒笓鐢ㄧ殑瀛楃闆嗭紝榪欐牱鍙浣犵殑鏂囨。鏄嬌鐢ㄦ爣鍑嗗瓧絎﹂泦緙栧啓鐨勶紝閫氱敤鎬у氨姣旇緝楂樹簡銆備緥濡備綘鐢℅B2312瀛楃闆嗙紪鍐欑殑鏂囨。錛屽湪涓浗澶ч檰鍐呯殑浠諱綍鏈哄櫒涓婇兘鑳芥紜樉紺恒傚悓鏃訛紝鎴戜滑涔熷彲浠ュ湪涓鍙版満鍣ㄤ笂闃呰澶氫釜鍥藉涓嶅悓璇█鐨勬枃妗d簡錛屽墠鎻愭槸鏈満蹇呴』瀹夎璇ユ枃妗d嬌鐢ㄧ殑瀛楃闆嗐?/p>

Unicode鐨勫嚭鐜?/h2>

铏界劧閫氳繃浣跨敤涓嶅悓瀛楃闆嗭紝鎴戜滑鍙互鍦ㄤ竴鍙版満鍣ㄤ笂鏌ラ槄涓嶅悓璇█鐨勬枃妗o紝浣嗘槸鎴戜滑浠嶇劧鏃犳硶瑙e喅涓涓棶棰橈細鍦ㄤ竴浠芥枃妗d腑鏄劇ず鎵鏈夊瓧絎?/span>銆備負浜嗚В鍐寵繖涓棶棰橈紝鎴戜滑闇瑕佷竴涓叏浜虹被杈炬垚鍏辮瘑鐨勫法澶х殑瀛楃闆嗭紝榪欏氨鏄疷nicode瀛楃闆嗐?/p>

Unicode瀛楃闆嗘榪?/h3>

Unicode瀛楃闆嗘兜鐩栦簡鐩墠浜虹被浣跨敤鐨勬墍鏈夊瓧絎︼紝騫朵負姣忎釜瀛楃榪涜緇熶竴緙栧彿錛屽垎閰嶅敮涓鐨勫瓧絎︾爜錛圕ode Point錛夈俇nicode瀛楃闆嗗皢鎵鏈夊瓧絎︽寜鐓т嬌鐢ㄤ笂鐨勯綣佸害鍒掑垎涓?7涓眰闈紙Plane錛夛紝姣忎釜灞傞潰涓婃湁216=65536涓瓧絎︾爜絀洪棿銆?/p>

image

鍏朵腑絎?涓眰闈MP錛屽熀鏈兜鐩栦簡褰撲粖涓栫晫鐢ㄥ埌鐨勬墍鏈夊瓧絎︺傚叾浠栫殑灞傞潰瑕佷箞鏄敤鏉ヨ〃紺轟竴浜涜繙鍙ゆ椂鏈熺殑鏂囧瓧錛岃涔堟槸鐣欎綔鎵╁睍銆傛垜浠鉤甯哥敤鍒扮殑Unicode瀛楃錛屼竴鑸兘鏄綅浜嶣MP灞傞潰涓婄殑銆傜洰鍓峌nicode瀛楃闆嗕腑灝氭湁澶ч噺瀛楃絀洪棿鏈嬌鐢ㄣ?

緙栫爜緋葷粺鐨勫彉鍖?/h3>

鍦║nicode鍑虹幇涔嬪墠錛屾墍鏈夌殑瀛楃闆嗛兘鏄拰鍏蜂綋緙栫爜鏂規緇戝畾鍦ㄤ竴璧風殑錛岄兘鏄洿鎺ュ皢瀛楃鍜屾渶緇堝瓧鑺傛祦緇戝畾姝諱簡錛屼緥濡侫SCII緙栫爜緋葷粺瑙勫畾浣跨敤7姣旂壒鏉ョ紪鐮丄SCII瀛楃闆嗭紱GB2312浠ュ強GBK瀛楃闆嗭紝闄愬畾浜嗕嬌鐢ㄦ渶澶?涓瓧鑺傛潵緙栫爜鎵鏈夊瓧絎︼紝騫朵笖瑙勫畾浜嗗瓧鑺傚簭銆傝繖鏍風殑緙栫爜緋葷粺閫氬父鐢ㄧ畝鍗曠殑鏌ヨ〃錛屼篃灝辨槸閫氳繃浠g爜欏靛氨鍙互鐩存帴灝嗗瓧絎︽槧灝勪負瀛樺偍璁懼涓婄殑瀛楄妭嫻佷簡銆備緥濡備笅闈㈣繖涓緥瀛愶細

image

榪欑鏂瑰紡鐨勭己鐐瑰湪浜庯紝瀛楃鍜屽瓧鑺傛祦涔嬮棿鑰﹀悎寰楀お绱у瘑浜嗭紝浠庤岄檺瀹氫簡瀛楃闆嗙殑鎵╁睍鑳藉姏銆傚亣璁句互鍚庣伀鏄熶漢鍏ヤ綇鍦扮悆浜嗭紝瑕佸線鐜版湁瀛楃闆嗕腑鍔犲叆鐏槦鏂囧氨鍙樺緱寰堥毦鐢氳嚦涓嶅彲鑳戒簡錛岃屼笖寰堝鏄撶牬鍧忕幇鏈夌殑緙栫爜瑙勫垯銆?/p>

鍥犳Unicode鍦ㄨ璁′笂鑰冭檻鍒頒簡榪欎竴鐐癸紝灝嗗瓧絎﹂泦鍜屽瓧絎︾紪鐮佹柟妗堝垎紱誨紑銆?/p>

瀛楃緙栫爜緋葷粺

涔熷氨鏄錛?strong>铏界劧姣忎釜瀛楃鍦║nicode瀛楃闆嗕腑閮借兘鎵懼埌鍞竴紜畾鐨勭紪鍙鳳紙瀛楃鐮侊紝鍙堢ОUnicode鐮侊級錛屼絾鏄喅瀹氭渶緇堝瓧鑺傛祦鐨勫嵈鏄叿浣撶殑瀛楃緙栫爜銆備緥濡傚悓鏍鋒槸瀵筓nicode瀛楃“A”榪涜緙栫爜錛孶TF-8瀛楃緙栫爜寰楀埌鐨勫瓧鑺傛祦鏄?x41錛岃孶TF-16錛堝ぇ绔ā寮忥級寰楀埌鐨勬槸0x00 0x41銆?/p>

甯歌鐨刄nicode緙栫爜

UCS-2/UTF-16

濡傛灉瑕佹垜浠潵瀹炵幇Unicode瀛楃闆嗕腑BMP瀛楃鐨勭紪鐮佹柟妗堬紝鎴戜滑浼氭庝箞瀹炵幇錛熺敱浜嶣MP灞傞潰涓婃湁216=65536涓瓧絎︾爜錛屽洜姝ゆ垜浠彧闇瑕佷袱涓瓧鑺傚氨鍙互瀹屽叏琛ㄧず榪欐墍鏈夌殑瀛楃浜嗐?/p>

涓句釜渚嬪瓙錛?#8220;涓?#8221;鐨刄nicode瀛楃鐮佹槸0x4E2D(01001110 00101101)錛岄偅涔堟垜浠彲浠ョ紪鐮佷負01001110 00101101錛堝ぇ绔級鎴栬?0101101 01001110 錛堝皬绔級銆?/p>

UCS-2鍜孶TF-16瀵逛簬BMP灞傞潰鐨勫瓧絎﹀潎鏄嬌鐢?涓瓧鑺傛潵琛ㄧず錛屽茍涓旂紪鐮佸緱鍒扮殑緇撴灉瀹屽叏涓鑷淬備笉鍚屼箣澶勫湪浜庯紝UCS-2鏈鍒濊璁$殑鏃跺欏彧鑰冭檻鍒癇MP瀛楃錛屽洜姝や嬌鐢ㄥ浐瀹?涓瓧鑺傞暱搴︼紝涔熷氨鏄錛屼粬鏃犳硶琛ㄧずUnicode鍏朵粬灞傞潰涓婄殑瀛楃錛岃孶TF-16涓轟簡瑙i櫎榪欎釜闄愬埗錛屾敮鎸乁nicode鍏ㄥ瓧絎﹂泦鐨勭紪瑙g爜錛岄噰鐢ㄤ簡鍙橀暱緙栫爜錛屾渶灝戜嬌鐢?涓瓧鑺傦紝濡傛灉瑕佺紪鐮丅MP浠ュ鐨勫瓧絎︼紝鍒欓渶瑕?涓瓧鑺傜粨瀵?/span>錛岃繖閲屽氨涓嶈璁洪偅涔堣繙錛屾湁鍏磋叮鍙互鍙傝冪淮鍩虹櫨縐戯細UTF-16/UCS-2銆?/p>

Windows浠嶯T鏃朵唬寮濮嬪氨閲囩敤浜哢TF-16緙栫爜錛屽緢澶氭祦琛岀殑緙栫▼騫沖彴錛屼緥濡?Net錛孞ava錛孮t榪樻湁Mac涓嬬殑Cocoa絳夐兘鏄嬌鐢║TF-16浣滀負鍩虹鐨勫瓧絎︾紪鐮併備緥濡備唬鐮佷腑鐨勫瓧絎︿覆錛屽湪鍐呭瓨涓浉搴旂殑瀛楄妭嫻佸氨鏄敤UTF-16緙栫爜榪囩殑銆?/p>

UTF-8

UTF-8搴旇鏄洰鍓嶅簲鐢ㄦ渶騫挎硾鐨勪竴縐峌nicode緙栫爜鏂規銆傜敱浜嶶CS-2/UTF-16瀵逛簬ASCII瀛楃浣跨敤涓や釜瀛楄妭榪涜緙栫爜錛屽瓨鍌ㄥ拰澶勭悊鏁堢巼鐩稿浣庝笅錛屽茍涓旂敱浜嶢SCII瀛楃緇忚繃UTF-16緙栫爜鍚庡緱鍒扮殑涓や釜瀛楄妭錛岄珮瀛楄妭濮嬬粓鏄?x00錛屽緢澶欳璇█鐨勫嚱鏁伴兘灝嗘瀛楄妭瑙嗕負瀛楃涓叉湯灝句粠鑰屽鑷存棤娉曟紜В鏋愭枃鏈傚洜姝や竴寮濮嬫帹鍑虹殑鏃跺欓伃鍒板緢澶氳タ鏂瑰浗瀹剁殑鎶佃Е錛屽ぇ澶у獎鍝嶄簡Unicode鐨勬帹琛屻傚悗鏉ヨ仾鏄庣殑浜轟滑鍙戞槑浜哢TF-8緙栫爜錛岃В鍐充簡榪欎釜闂銆?/p>

UTF-8緙栫爜鏂規閲囩敤1-4涓瓧鑺傛潵緙栫爜瀛楃錛屾柟娉曞叾瀹炰篃闈炲父綆鍗曘?/p>

image

錛堜笂鍥句腑鐨剎浠h〃Unicode鐮佺殑浣?浣嶏紝y浠h〃楂?浣嶏級

瀵逛簬ASCII瀛楃鐨勭紪鐮佷嬌鐢ㄥ崟瀛楄妭錛屽拰ASCII緙栫爜涓鎽鎬竴鏍鳳紝榪欐牱鎵鏈夊師鍏堜嬌鐢ˋSCII緙栬В鐮佺殑鏂囨。灝卞彲浠ョ洿鎺ヨ漿鍒癠TF-8緙栫爜浜嗐傚浜庡叾浠栧瓧絎︼紝鍒欎嬌鐢?-4涓瓧鑺傛潵琛ㄧず錛屽叾涓紝棣栧瓧鑺傚墠緗?鐨勬暟鐩唬琛ㄦ紜В鏋愭墍闇瑕佺殑瀛楄妭鏁幫紝鍓╀綑瀛楄妭鐨勯珮2浣嶅緇堟槸10銆備緥濡傞瀛楄妭鏄?110yyyy錛屽墠緗湁3涓?錛岃鏄庢紜В鏋愭誨叡闇瑕?涓瓧鑺傦紝闇瑕佸拰鍚庨潰2涓互10寮澶寸殑瀛楄妭緇撳悎鎵嶈兘姝g‘瑙f瀽寰楀埌瀛楃銆?/p>

鍏充簬UTF-8鐨勬洿澶氫俊鎭紝鍙傝冪淮鍩虹櫨縐戯細UTF-8銆?/p>

GB18030

浠諱綍鑳藉灝哢nicode瀛楃鏄犲皠涓哄瓧鑺傛祦鐨勭紪鐮侀兘灞炰簬Unicode緙栫爜銆備腑鍥界殑GB18030緙栫爜錛岃鐩栦簡Unicode鎵鏈夌殑瀛楃錛屽洜姝や篃綆楁槸涓縐峌nicode緙栫爜銆傚彧涓嶈繃浠栫殑緙栫爜鏂瑰紡騫朵笉鍍廢TF-8鎴栬匲TF-16涓鏍鳳紝灝哢nicode瀛楃鐨勭紪鍙烽氳繃涓瀹氱殑瑙勫垯榪涜杞崲錛岃屽彧鑳介氳繃鏌ヨ〃鐨勬墜孌佃繘琛岀紪鐮併?/p>

鍏充簬GB18030鐨勬洿澶氫俊鎭紝鍙傝冿細GB18030銆?/p>

Unicode鐩稿叧鐨勫父瑙侀棶棰?/h3>

Unicode鏄袱涓瓧鑺傚悧錛?/strong>

Unicode鍙槸瀹氫箟浜嗕竴涓簽澶х殑銆佸叏鐞冮氱敤鐨勫瓧絎﹂泦錛屽茍涓烘瘡涓瓧絎﹁瀹氫簡鍞竴紜畾鐨勭紪鍙鳳紝鍏蜂綋瀛樺偍涓轟粈涔堟牱鐨勫瓧鑺傛祦錛屽彇鍐充簬瀛楃緙栫爜鏂規銆傛帹鑽愮殑Unicode緙栫爜鏄疷TF-16鍜孶TF-8銆?/p>

甯︾鍚嶇殑UTF-8鎸囩殑鏄粈涔堟剰鎬濓紵

甯︾鍚嶆寚鐨勬槸瀛楄妭嫻佷互BOM鏍囪寮濮嬨傚緢澶氳蔣浠朵細“鏅鴻兘”鐨勬帰嫻嬪綋鍓嶅瓧鑺傛祦浣跨敤鐨勫瓧絎︾紪鐮侊紝榪欑鎺㈡祴榪囩▼鍑轟簬鏁堢巼鑰冭檻錛岄氬父浼氭彁鍙栧瓧鑺傛祦鍓嶉潰鑻ュ共涓瓧鑺傦紝鐪嬬湅鏄惁絎﹀悎鏌愪簺甯歌瀛楃緙栫爜鐨勭紪鐮佽鍒欍傜敱浜嶶TF-8鍜孉SCII緙栫爜瀵逛簬綰嫳鏂囩殑緙栫爜鏄竴鏍風殑錛屾棤娉曞尯鍒嗗紑鏉ワ紝鍥犳閫氳繃鍦ㄥ瓧鑺傛祦鏈鍓嶉潰娣誨姞BOM鏍囪鍙互鍛婅瘔杞歡錛屽綋鍓嶄嬌鐢ㄧ殑鏄疷nicode緙栫爜錛屽垽鍒垚鍔熺巼灝卞崄鍒嗗噯紜簡銆備絾鏄渶瑕佹敞鎰忥紝涓嶆槸鎵鏈夎蔣浠舵垨鑰呯▼搴忛兘鑳芥紜鐞咮OM鏍囪錛屼緥濡侾HP灝變笉浼氭嫻婤OM鏍囪錛岀洿鎺ユ妸瀹冨綋鏅氬瓧鑺傛祦瑙f瀽浜嗐傚洜姝ゅ鏋滀綘鐨凱HP鏂囦歡鏄噰鐢ㄥ甫BOM鏍囪鐨刄TF-8榪涜緙栫爜鐨勶紝閭d箞鏈夊彲鑳戒細鍑虹幇闂銆?/p>

Unicode緙栫爜鍜屼互鍓嶇殑瀛楃闆嗙紪鐮佹湁浠涔堝尯鍒紵

鏃╂湡瀛楃緙栫爜銆佸瓧絎﹂泦鍜屼唬鐮侀〉絳夋蹇甸兘鏄〃杈懼悓涓涓剰鎬濄備緥濡侴B2312瀛楃闆嗐丟B2312緙栫爜錛?36浠g爜欏碉紝瀹為檯涓婅鐨勬槸鍚屼釜涓滆タ銆備絾鏄浜嶶nicode鍒欎笉鍚岋紝Unicode瀛楃闆嗗彧鏄畾涔変簡瀛楃鐨勯泦鍚堝拰鍞竴緙栧彿錛孶nicode緙栫爜錛屽垯鏄UTF-8銆乁CS-2/UTF-16絳夊叿浣撶紪鐮佹柟妗堢殑緇熺О鑰屽凡錛屽茍涓嶆槸鍏蜂綋鐨勭紪鐮佹柟妗堛傛墍浠ュ綋闇瑕佺敤鍒板瓧絎︾紪鐮佺殑鏃跺欙紝浣犲彲浠ュ啓gb2312錛宑odepage936錛寀tf-8錛寀tf-16錛屼絾璇蜂笉瑕佸啓unicode錛堢湅榪囧埆浜哄湪緗戦〉鐨刴eta鏍囩閲屽ご鍐檆harset=unicode錛屾湁鎰熻屽彂錛夈?/p>

 

涔辯爜闂

涔辯爜鎸囩殑鏄▼搴忔樉紺哄嚭鏉ョ殑瀛楃鏂囨湰鏃犳硶鐢ㄤ換浣曡璦鍘昏В璇匯備竴鑸儏鍐典笅浼氬寘鍚ぇ閲?鎴栬咃拷銆備貢鐮侀棶棰樻槸鎵鏈夎綆楁満鐢ㄦ埛鎴栧鎴栧皯浼氶亣鍒扮殑闂銆?span style="color: #008000">閫犳垚涔辯爜鐨勫師鍥犲氨鏄洜涓轟嬌鐢ㄤ簡閿欒鐨勫瓧絎︾紪鐮佸幓瑙g爜瀛楄妭嫻?/strong>錛?strong>鍥犳褰撴垜浠湪鎬濊冧換浣曡窡鏂囨湰鏄劇ず鏈夊叧鐨勯棶棰樻椂錛岃鏃跺埢淇濇寔娓呴啋錛氬綋鍓嶄嬌鐢ㄧ殑瀛楃緙栫爜鏄粈涔?/span>銆傚彧鏈夎繖鏍鳳紝鎴戜滑鎵嶈兘姝g‘鍒嗘瀽鍜屽鐞嗕貢鐮侀棶棰樸?/span>

渚嬪鏈甯歌鐨勭綉欏典貢鐮侀棶棰樸傚鏋滀綘鏄綉绔欐妧鏈漢鍛橈紝閬囧埌榪欐牱鐨勯棶棰橈紝闇瑕?span style="color: #000000">媯鏌ヤ互涓嬪師鍥狅細

  • 鏈嶅姟鍣ㄨ繑鍥炵殑鍝嶅簲澶碈ontent-Type娌℃湁鎸囨槑瀛楃緙栫爜
  • 緗戦〉鍐呮槸鍚︿嬌鐢∕ETA HTTP-EQUIV鏍囩鎸囧畾浜嗗瓧絎︾紪鐮?
  • 緗戦〉鏂囦歡鏈韓瀛樺偍鏃朵嬌鐢ㄧ殑瀛楃緙栫爜鍜岀綉欏靛0鏄庣殑瀛楃緙栫爜鏄惁涓鑷? 

image image

娉ㄦ剰錛岀綉欏佃В鏋愮殑榪囩▼濡傛灉浣跨敤鐨勫瓧絎︾紪鐮佷笉姝g‘錛岃繕鍙兘浼氬鑷磋剼鏈垨鑰呮牱寮忚〃鍑洪敊銆傚叿浣撶粏鑺傚彲浠ュ弬鑰冩垜浠ュ墠鍐欒繃鐨勬枃绔狅細鏂囨。瀛楃闆嗗鑷寸殑鑴氭湰閿欒鍜?a >Asp.Net欏甸潰鐨勭紪鐮侀棶棰?/font>銆?/p>

涓嶄箙鍓嶇湅鍒版煇鎶鏈鍧涙湁浜哄弽棣堬紝WinForm紼嬪簭浣跨敤Clipboard綾葷殑GetData鏂規硶鍘昏闂壀鍒囨澘涓殑HTML鍐呭鏃朵細鍑虹幇涔辯爜鐨勯棶棰橈紝鎴戜及璁′篃鏄敱浜嶹inForm鍦ㄨ幏鍙朒TML鏂囨湰鐨勬椂鍊欐病鏈夌敤瀵規紜殑瀛楃緙栫爜瀵艱嚧鐨勩俉indows鍓創鏉垮彧鏀寔UTF-8緙栫爜錛屼篃灝辨槸璇翠綘浼犲叆鐨勬枃鏈兘浼氳UTF-8緙栬В鐮併傝繖鏍蜂竴鏉ワ紝鍙涓や釜紼嬪簭閮芥槸璋冪敤Windows鍓垏鏉緼PI緙栫▼鐨勮瘽錛岄偅涔堝鍒剁矘璐寸殑榪囩▼涓笉浼氬嚭鐜頒貢鐮併傞櫎闈炰竴鏂瑰湪鑾峰彇鍒板壀璐存澘鏁版嵁涔嬪悗浣跨敤浜嗛敊璇殑瀛楃緙栫爜榪涜瑙g爜錛屾墠浼氬緱鍒頒貢鐮侊紙鎴戝仛浜嗙畝鍗曠殑WinForm鍓垏鏉跨紪紼嬪疄楠岋紝鍙戠幇GetData浣跨敤鐨勬槸緋葷粺榛樿緙栫爜錛岃屼笉鏄疷TF-8緙栫爜錛夈?/p>

鍏充簬涔辯爜涓嚭鐜?鎴栬咃拷錛岃繖閲岄渶瑕侀澶栨彁涓涓嬶紝褰撶▼搴忎嬌鐢ㄧ壒瀹氬瓧絎︾紪鐮佽В鏋愬瓧鑺傛祦鐨勬椂鍊欙紝涓鏃﹂亣鍒版棤娉曡В鏋愮殑瀛楄妭嫻佹椂錛屽氨浼氱敤?鎴栬咃拷鏉ユ浛浠c傚洜姝わ紝涓鏃︿綘鏈緇堣В鏋愬緱鍒扮殑鏂囨湰鍖呭惈榪欐牱鐨勫瓧絎︼紝鑰屼綘鍙堟棤娉曞緱鍒板師濮嬪瓧鑺傛祦鐨勬椂鍊欙紝璇存槑姝g‘鐨勪俊鎭凡緇忓交搴曚涪澶變簡錛屽皾璇曚換浣曞瓧絎︾紪鐮侀兘鏃犳硶浠庤繖鏍風殑瀛楃鏂囨湰涓繕鍘熷嚭姝g‘鐨勪俊鎭潵銆?/p>

蹇呰鐨勬湳璇В閲?/h2>

瀛楃闆嗭紙Character Set錛?/strong>錛屽瓧闈笂鐨勭悊瑙e氨鏄瓧絎︾殑闆嗗悎錛屼緥濡侫SCII瀛楃闆嗭紝瀹氫箟浜?28涓瓧絎︼紱GB2312瀹氫箟浜?445涓瓧絎︺傝?strong>璁$畻鏈虹郴緇熶腑鎻愬埌鐨勫瓧絎﹂泦鍑嗙‘鏉ヨ錛屾寚鐨勬槸宸茬紪鍙風殑瀛楃鐨勬湁搴忛泦鍚堬紙涓嶄竴瀹氭槸榪炵畫錛?/span>銆?/p>

瀛楃鐮侊紙Code Point錛?/strong>鎸囩殑灝辨槸瀛楃闆嗕腑姣忎釜瀛楃鐨勬暟瀛楃紪鍙楓備緥濡侫SCII瀛楃闆嗙敤0-127榪欒繛緇殑128涓暟瀛楀垎鍒〃紺?28涓瓧絎︼紱GBK瀛楃闆嗕嬌鐢ㄥ尯浣嶇爜鐨勬柟寮忎負姣忎釜瀛楃緙栧彿錛岄鍏堝畾涔変竴涓?4X94鐨勭煩闃碉紝琛岀О涓?#8220;鍖?#8221;錛屽垪縐頒負“浣?#8221;錛岀劧鍚庡皢鎵鏈夊浗鏍囨眽瀛楁斁鍏ョ煩闃靛綋涓紝榪欐牱姣忎釜姹夊瓧灝卞彲浠ョ敤鍞竴鐨?#8220;鍖轟綅”鐮佹潵鏍囪瘑浜嗐備緥濡?#8220;涓?#8221;瀛楄鏀懼埌54鍖虹48浣嶏紝鍥犳瀛楃鐮佸氨鏄?448銆傝孶nicode涓皢瀛楃闆嗘寜鐓т竴瀹氱殑綾誨埆鍒掑垎鍒?~16榪?7涓眰闈紙Planes錛変腑錛屾瘡涓眰闈腑鎷ユ湁216=65536涓瓧絎︾爜錛屽洜姝nicode鎬誨叡鎷ユ湁鐨勫瓧絎︾爜錛屼篃鍗蟲槸Unicode鐨勫瓧絎︾┖闂存誨叡鏈?7*65536=1114112銆?/p>

image

緙栫爜鐨勮繃紼嬫槸灝嗗瓧絎﹁漿鎹㈡垚瀛楄妭嫻併?/p>

瑙g爜鐨勮繃紼嬫槸灝嗗瓧鑺傛祦瑙f瀽涓哄瓧絎︺?/p>

瀛楃緙栫爜錛圕haracter Encoding錛?/strong>鏄皢瀛楃闆嗕腑鐨勫瓧絎︾爜鏄犲皠涓哄瓧鑺傛祦鐨勪竴縐嶅叿浣撳疄鐜版柟妗堛備緥濡侫SCII瀛楃緙栫爜瑙勫畾浣跨敤鍗曞瓧鑺備腑浣庝綅鐨?涓瘮鐗瑰幓緙栫爜鎵鏈夌殑瀛楃銆備緥濡?#8216;A’鐨勭紪鍙鋒槸65錛岀敤鍗曞瓧鑺傝〃紺哄氨鏄?x41錛屽洜姝ゅ啓鍏ュ瓨鍌ㄨ澶囩殑鏃跺欏氨鏄痓’01000001’銆侴BK緙栫爜鍒欐槸灝嗗尯浣嶇爜錛圙BK鐨勫瓧絎︾爜錛変腑鐨勫尯鐮佸拰浣嶇爜鐨勫垎鍒姞涓?xA0錛?60錛夌殑鍋忕Щ錛堜箣鎵浠ヨ鍔犱笂榪欐牱鐨勫亸縐伙紝涓昏鏄負浜嗗拰ASCII鐮佸吋瀹癸級錛屼緥濡傚垰鍒氭彁鍒扮殑“涓?#8221;瀛楋紝鍖轟綅鐮佹槸5448錛屽崄鍏繘鍒舵槸0x3630錛屽尯鐮佸拰浣嶇爜鍒嗗埆鍔犱笂0xA0鐨勫亸縐諱箣鍚庡氨寰楀埌0xD6D0錛岃繖灝辨槸“涓?#8221;瀛楃殑GBK緙栫爜緇撴灉銆?/p>

浠g爜欏碉紙Code Page錛?/strong>涓縐嶅瓧絎︾紪鐮佸叿浣撳艦寮忋傛棭鏈熷瓧絎︾浉瀵瑰皯錛屽洜姝ら氬父浼氫嬌鐢ㄧ被浼艱〃鏍肩殑褰㈠紡灝嗗瓧絎︾洿鎺ユ槧灝勪負瀛楄妭嫻侊紝鐒跺悗閫氳繃鏌ヨ〃鐨勬柟寮忔潵瀹炵幇瀛楃鐨勭紪瑙g爜銆傜幇浠f搷浣滅郴緇熸部鐢ㄤ簡榪欑鏂瑰紡銆備緥濡俉indows浣跨敤936浠g爜欏點丮ac緋葷粺浣跨敤EUC-CN浠g爜欏靛疄鐜癎BK瀛楃闆嗙殑緙栫爜錛屽悕瀛楄櫧鐒朵笉涓鏍鳳紝浣嗗浜庡悓涓姹夊瓧鐨勭紪鐮佽偗瀹氭槸涓鏍風殑銆?/p>

澶у皬绔?/strong>鐨勮娉曟簮鑷婃牸鍒椾經娓歌銆嬨傛垜浠煡閬擄紝楦¤泲閫氬父涓绔ぇ涓绔皬錛屽皬浜哄浗鐨勪漢浠浜庡墺铔嬪3鏃跺簲浠庡摢涓绔紑濮嬪墺璧鋒湁鐫涓嶄竴鏍風殑鐪嬫硶銆傚悓鏍鳳紝璁$畻鏈虹晫瀵逛簬浼犺緭澶氬瓧鑺傚瓧錛堢敱澶氫釜瀛楄妭鏉ュ叡鍚岃〃紺轟竴涓暟鎹被鍨嬶級鏃訛紝鏄厛浼犻珮浣嶅瓧鑺傦紙澶х錛夎繕鏄厛浼犱綆浣嶅瓧鑺傦紙灝忕錛変篃鏈夌潃涓嶄竴鏍風殑鐪嬫硶錛岃繖灝辨槸璁$畻鏈洪噷澶村ぇ灝忕妯″紡鐨勭敱鏉ヤ簡銆傛棤璁烘槸鍐欐枃浠惰繕鏄綉緇滀紶杈擄紝瀹為檯涓婇兘鏄線嫻佽澶囪繘琛屽啓鎿嶄綔鐨勮繃紼嬶紝鑰屼笖榪欎釜鍐欐搷浣滄槸浠庢祦鐨勪綆鍦板潃鍚戦珮鍦板潃寮濮嬪啓錛堣繖寰堢鍚堜漢鐨勪範鎯級錛屽浜庡瀛楄妭瀛楁潵璇達紝濡傛灉鍏堝啓鍏ラ珮浣嶅瓧鑺傦紝鍒欑О浣滃ぇ绔ā寮忋傚弽涔嬪垯縐頒綔灝忕妯″紡銆備篃灝辨槸璇達紝澶х妯″紡涓嬶紝瀛楄妭搴忓拰嫻佽澶囩殑鍦板潃欏哄簭鏄浉鍙嶇殑錛岃屽皬绔ā寮忓垯鏄浉鍚岀殑銆備竴鑸綉緇滃崗璁兘閲囩敤澶х妯″紡榪涜浼犺緭銆?/p>

——Kevin Yang

鍙傝冮摼鎺ワ細



]]>
dllhttp://m.shnenglu.com/Walker/articles/147052.html婕鑰吤?amp;鈥︹?錕?/dc:creator>婕鑰吤?amp;鈥︹?錕?/author>Tue, 24 May 2011 12:39:00 GMThttp://m.shnenglu.com/Walker/articles/147052.htmlhttp://m.shnenglu.com/Walker/comments/147052.htmlhttp://m.shnenglu.com/Walker/articles/147052.html#Feedback0http://m.shnenglu.com/Walker/comments/commentRss/147052.htmlhttp://m.shnenglu.com/Walker/services/trackbacks/147052.html 

Def鍜?/span>__declspec(dllexport)

鍏跺疄def鐨勫姛鑳界浉褰撲簬extern “C” __declspec(dllexport)錛屾墍浠ュ畠涔熶粎鑳藉鐞?/span>C鍑芥暟錛岃屼笉鑳藉鐞嗛噸杞藉嚱鏁般傝?/span>__declspec(dllexport)鍜?/span>__declspec(dllimport)閰嶅悎浣跨敤鑳藉閫傚簲浠諱綍鎯呭喌錛屽洜姝?/span>__declspec(dllexport)鏄洿涓哄厛榪涚殑鏂規硶銆傛墍浠ワ紝鐩墠鏅亶鐨勭湅娉曟槸涓嶄嬌鐢?/span>def鏂囦歡錛屾垜涔熷悓鎰忚繖涓湅娉曘?br />

濡備綍鍦╠ll涓畾涔夎緭鍑哄嚱鏁?/h1>

鎬諱綋鏉ヨ鏈変袱縐嶆柟娉曪紝
涓縐嶆槸娣誨姞涓涓猟ef瀹氫箟鏂囦歡錛屽湪姝ゆ枃浠朵腑瀹氫箟dll涓杈撳嚭鐨勫嚱鏁幫紱
絎簩縐嶆槸鍦ㄦ簮浠g爜涓緟杈撳嚭鐨勫嚱鏁板墠鍔犱笂__declspec(dllexport)鍏抽敭瀛椼?/font>

2)鍚嶅瓧淇グ綰﹀畾

1銆佷慨楗板悕(Decoration   name)

“C”鎴栬?#8220;C++”鍑芥暟鍦ㄥ唴閮紙緙栬瘧鍜岄摼鎺ワ級閫氳繃淇グ鍚嶈瘑鍒備慨楗板悕鏄紪璇戝櫒鍦ㄧ紪璇戝嚱鏁板畾涔夋垨鑰呭師鍨嬫椂鐢熸垚鐨勫瓧絎︿覆銆傛湁浜涙儏鍐典笅浣跨敤鍑芥暟鐨勪慨楗板悕鏄繀瑕佺殑錛屽鍦ㄦā鍧楀畾涔夋枃浠墮噷澶存寚瀹氳緭鍑?#8220;C++”閲嶈澆鍑芥暟銆佹瀯閫犲嚱鏁般佹瀽鏋勫嚱鏁幫紝鍙堝鍦ㄦ眹緙栦唬鐮侀噷璋冪敤“C””鎴?#8220;C++”鍑芥暟絳夈?

淇グ鍚嶇敱鍑芥暟鍚嶃佺被鍚嶃佽皟鐢ㄧ害瀹氥佽繑鍥炵被鍨嬨佸弬鏁扮瓑鍏卞悓鍐沖畾銆?

2銆佸悕瀛椾慨楗扮害瀹氶殢璋冪敤綰﹀畾鍜岀紪璇戠綾?C鎴朇++)鐨勪笉鍚岃屽彉鍖栥傚嚱鏁板悕淇グ綰﹀畾闅忕紪璇戠綾誨拰璋冪敤綰﹀畾鐨勪笉鍚岃屼笉鍚岋紝涓嬮潰鍒嗗埆璇存槑銆?

a銆丆緙栬瘧鏃跺嚱鏁板悕淇グ綰﹀畾瑙勫垯錛?

__stdcall璋冪敤綰﹀畾鍦ㄨ緭鍑哄嚱鏁板悕鍓嶅姞涓婁竴涓笅鍒掔嚎鍓嶇紑錛屽悗闈㈠姞涓婁竴涓?#8220;@”絎﹀彿鍜屽叾鍙傛暟鐨勫瓧鑺傛暟錛屾牸寮忎負_functionname@number銆?

__cdecl璋冪敤綰﹀畾浠呭湪杈撳嚭鍑芥暟鍚嶅墠鍔犱笂涓涓笅鍒掔嚎鍓嶇紑錛屾牸寮忎負_functionname銆?

__fastcall璋冪敤綰﹀畾鍦ㄨ緭鍑哄嚱鏁板悕鍓嶅姞涓婁竴涓?#8220;@”絎﹀彿錛屽悗闈篃鏄竴涓?#8220;@”絎﹀彿鍜屽叾鍙傛暟鐨勫瓧鑺傛暟錛屾牸寮忎負@functionname@number銆?

瀹冧滑鍧囦笉鏀瑰彉杈撳嚭鍑芥暟鍚嶄腑鐨勫瓧絎﹀ぇ灝忓啓錛岃繖鍜孭ASCAL璋冪敤綰﹀畾涓嶅悓錛孭ASCAL綰﹀畾杈撳嚭鐨勫嚱鏁板悕鏃犱換浣曚慨楗頒笖鍏ㄩ儴澶у啓銆?

b銆丆++緙栬瘧鏃跺嚱鏁板悕淇グ綰﹀畾瑙勫垯錛?

__stdcall璋冪敤綰﹀畾錛?
1銆佷互“?”鏍囪瘑鍑芥暟鍚嶇殑寮濮嬶紝鍚庤窡鍑芥暟鍚嶏紱
2銆佸嚱鏁板悕鍚庨潰浠?#8220;@@YG”鏍囪瘑鍙傛暟琛ㄧ殑寮濮嬶紝鍚庤窡鍙傛暟琛紱
3銆佸弬鏁拌〃浠ヤ唬鍙瘋〃紺猴細
X--void   錛?
D--char錛?
E--unsigned   char錛?
F--short錛?
H--int錛?
I--unsigned   int錛?
J--long錛?
K--unsigned   long錛?
M--float錛?
N--double錛?
_N--bool錛?
....
PA--琛ㄧず鎸囬拡錛屽悗闈㈢殑浠e彿琛ㄦ槑鎸囬拡綾誨瀷錛屽鏋滅浉鍚岀被鍨嬬殑鎸囬拡榪炵畫鍑虹幇錛屼互“0”浠f浛錛屼竴涓?#8220;0”浠h〃涓嬈¢噸澶嶏紱
4銆佸弬鏁拌〃鐨勭涓欏逛負璇ュ嚱鏁扮殑榪斿洖鍊肩被鍨嬶紝鍏跺悗渚濇涓哄弬鏁扮殑鏁版嵁綾誨瀷,鎸囬拡鏍囪瘑鍦ㄥ叾鎵鎸囨暟鎹被鍨嬪墠錛? 
5銆佸弬鏁拌〃鍚庝互“@Z”鏍囪瘑鏁翠釜鍚嶅瓧鐨勭粨鏉燂紝濡傛灉璇ュ嚱鏁版棤鍙傛暟錛屽垯浠?#8220;Z”鏍囪瘑緇撴潫銆?

鍏舵牸寮忎負“?functionname@@YG*****@Z”鎴?#8220;?functionname@@YG*XZ”錛屼緥濡?
int   Test1錛坈har   *var1,unsigned   long錛?----“?Test1@@YGHPADK@Z”
void   Test2錛堬級   -----“?Test2@@YGXXZ”

__cdecl璋冪敤綰﹀畾錛?
瑙勫垯鍚屼笂闈㈢殑_stdcall璋冪敤綰﹀畾錛屽彧鏄弬鏁拌〃鐨勫紑濮嬫爣璇嗙敱涓婇潰鐨?#8220;@@YG”鍙樹負“@@YA”銆?

__fastcall璋冪敤綰﹀畾錛?
瑙勫垯鍚屼笂闈㈢殑_stdcall璋冪敤綰﹀畾錛屽彧鏄弬鏁拌〃鐨勫紑濮嬫爣璇嗙敱涓婇潰鐨?#8220;@@YG”鍙樹負“@@YI”銆?

VC++瀵瑰嚱鏁扮殑鐪佺己澹版槑鏄?"__cedcl ",灝嗗彧鑳借C/C++璋冪敤.


澶у閮藉簲璇ョ煡閬擄紝鍑芥暟璋冪敤閮芥湁淇グ絎︼紝鏈塤_cdecl,__stdcall,__fastcall絳夌瓑錛屼笉鍚屼慨楗扮鎰忓懗鐫涓嶅悓鐨勫弬鏁板嚭鏍堟柟寮忎互鍙婁笉鍚岀殑鍑芥暟鍚嶇О鍙樺寲銆?
瀵逛簬C璇█錛岄粯璁ゆ槸__cdecl錛屼絾濡傛灉鎴戜滑瑕佸仛DLL闇瑕佸叾瀹冭璦渚嬪Delphi銆乂B絳夎皟鐢紝閫氬父閮藉緩璁0鏄庝負__stdcall銆倃in32鐨刟pi鍩烘湰閮芥槸__stdcall鏂瑰紡錛堝氨鏄偅涓猈INAPI瀹忥級銆?

闂灝卞嚭鍦ㄨ繖涓猻tdcall浜嗐傚浜嶸C鏉ヨ錛宊_cdecl淇グ鐨勫嚱鏁幫紝鍦―LL鐨勫鍑哄悕瀛椾竴鑸槸娌℃湁鍙樺寲鐨勶紝浣嗗浜巁_stdcall灝變細鍋氫竴浜涙敼鍙橈紝鍦ㄥ墠闈㈠姞涓涓笅鍒掔嚎錛屽悗闈㈠啀琛ヤ笂涓涓?#8220;@”錛屽啀鍔犱笂鍙傛暟鐨勫瓧鑺傞暱搴︽誨拰銆?

渚嬪錛屽浜庡嚱鏁?int add(int a, int b)錛屽鏋渋nt __cdecl add(int a, int b)錛屽湪DLL鐨勫鍑哄悕瀛楄繕鏄?#8220;add”錛屼絾濡傛灉鏄痠nt __stdcall add(int a, int b)錛屽湪DLL鐨勫鍑哄悕瀛楀氨鏄?#8220;_add@8”錛堟煡鐪嬪鍑哄悕瀛楀彲浠ョ敤VC鑷甫鐨刣umpbin鍛戒護錛屾柟娉曟槸“dumpbin /exports aaa.dll”錛夈?

濂戒簡錛岃浜嗕竴澶у爢搴熻瘽錛屽紑濮嬭繘涓婚鍟︺?

寮濮嬬殑鏃跺欙紝鎴戝仛浜嗕竴涓猼est.dll錛屼緥濡傚寘鍚竴涓鍑虹殑鍑芥暟 int __stdcall build(int n)銆?
鍦╠elphi鐨勬椂鍊欙紝濡傛灉鐢?

Java浠g爜 澶嶅埗浠g爜 鏀惰棌浠g爜
  1. function build(n:Integer): integer; stdcall; external 'test.dll' name 'build';  

 

榪欑澹版槑鏂瑰紡鐨勮瘽錛屽鍏ヤ細鍑洪敊錛屽洜涓烘壘涓嶅埌build榪欎釜鍑芥暟錛岃繖閲岀殑build宸茬粡鏀規垚鍚嶅瓧鏄痏build@4銆傚綋鐒訛紝濡傛灉鎴戜滑鐩存帴鍐?#8220;external 'test.dll' name '_build@4';”搴旇鏄病鏈夐棶棰樼殑銆備笉榪囦笉鐖姐備負浠涔坵in api鐨勫嚱鏁板氨娌℃湁榪欎簺涔變竷鍏碂鐨勪笢瑗匡紵

鍚庢潵鍦ㄧ綉涓婃壘浜嗕竴閬嶏紝鍐欎簡涓涓猟ef鏂囦歡銆?

Java浠g爜 澶嶅埗浠g爜 鏀惰棌浠g爜
  1. LIBRARY   test.dll   
  2.   
  3. EXPORTS   
  4. build  

 



榪欐牱鐢熸垚鐨刣ll鐨勫鍑哄悕瀛楀氨娌℃湁閭d簺涔變竷鍏碂鐨勪慨楗扮浜嗐備笉榪囪繖涓椂鍊欏張杞埌C榪欒竟鏈夐棶棰樹簡銆傚師鍥犳槸C榪欒竟鍦ㄩ摼鎺ョ殑鏃跺欐壘涓嶅埌_build@4榪欎釜鍑芥暟銆傜湡鏄檿鍊掞紝涓よ竟涓嶈濂姐?

鎴戝氨瑙夊緱濂囨紝鎬庝箞win api鐨勫嚱鏁幫紝鍗蟲病鏈夐偅浜涗慨楗扮錛屼絾鍙堝彲浠ヨdelphi銆丆銆乂B絳夋紜皟鐢ㄥ憿錛熷鎬晩銆?br />
浠婂ぉ鍐欑嚎紼嬪嚱鏁版椂錛屽彂鐜癿sdn涓ThreadProc鐨勫畾涔夋湁瑕佹眰錛欴WORD WINAPI ThreadProc(LPVOID lpParameter);

涓嶈В涓轟粈涔堣鐢╓INAPI瀹忓畾涔夛紝鏌ヤ簡鍚庡彂鐜頒笅闈㈢殑瀹氫箟銆備簬鏄箮闇瑕佸尯鍒玙_stdcall鍜宊_cdecl涓よ呯殑鍖哄埆錛?#define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall
#define cdecl _cdecl
#ifndef CDECL
#define CDECL _cdecl
#endif

鍑犱箮鎴戜滑鍐欑殑姣忎竴涓猈INDOWS API鍑芥暟閮芥槸__stdcall綾誨瀷鐨勶紝棣栧厛錛岄渶瑕佷簡瑙d袱鑰呬箣闂寸殑鍖哄埆錛?WINDOWS鐨勫嚱鏁拌皟鐢ㄦ椂闇瑕佺敤鍒版爤錛圫TACK錛屼竴縐嶅厛鍏ュ悗鍑虹殑瀛樺偍緇撴瀯錛夈傚綋鍑芥暟璋冪敤瀹屾垚鍚庯紝鏍堥渶瑕佹竻妤氾紝榪欓噷灝辨槸闂鐨勫叧閿紝濡備綍娓呴櫎錛燂紵濡傛灉鎴戜滑鐨勫嚱鏁頒嬌鐢ㄤ簡_cdecl錛岄偅涔堟爤鐨勬竻闄ゅ伐浣滄槸鐢辮皟鐢ㄨ咃紝鐢–OM鐨勬湳璇潵璁插氨鏄鎴鋒潵瀹屾垚鐨勩傝繖鏍峰甫鏉ヤ簡涓涓鎵嬬殑闂錛屼笉鍚岀殑緙栬瘧鍣ㄤ駭鐢熸爤鐨勬柟寮忎笉灝界浉鍚岋紝閭d箞璋冪敤鑰呰兘鍚︽甯哥殑瀹屾垚娓呴櫎宸ヤ綔鍛紵絳旀鏄笉鑳姐傚鏋滀嬌鐢╛_stdcall錛屼笂闈㈢殑闂灝辮В鍐充簡錛屽嚱鏁拌嚜宸辮В鍐蟲竻闄ゅ伐浣溿傛墍浠ワ紝鍦ㄨ法錛堝紑鍙戯級騫沖彴鐨勮皟鐢ㄤ腑錛屾垜浠兘浣跨敤__stdcall錛堣櫧鐒舵湁鏃舵槸浠?WINAPI鐨勬牱瀛愬嚭鐜幫級銆傞偅涔堜負浠涔堣繕闇瑕乢cdecl鍛紵褰撴垜浠亣鍒拌繖鏍風殑鍑芥暟濡俧printf()瀹冪殑鍙傛暟鏄彲鍙樼殑錛屼笉瀹氶暱鐨勶紝琚皟鐢ㄨ呬簨鍏堟棤娉曠煡閬撳弬鏁扮殑闀垮害錛屼簨鍚庣殑娓呴櫎宸ヤ綔涔熸棤娉曟甯哥殑榪涜錛屽洜姝わ紝榪欑鎯呭喌鎴戜滑鍙兘浣跨敤_cdecl銆傚埌榪欓噷鎴戜滑鏈変竴涓粨璁猴紝濡傛灉浣犵殑紼嬪簭涓病鏈夋秹鍙婂彲鍙樺弬鏁幫紝鏈濂戒嬌鐢╛_stdcall鍏抽敭瀛椼?

2.

__cdecl,__stdcall鏄0鏄庣殑鍑芥暟璋冪敤鍗忚.涓昏鏄紶鍙傚拰寮規爤鏂歸潰鐨勪笉鍚?涓鑸琧++鐢ㄧ殑鏄痏_cdecl,windows閲屽ぇ閮界敤鐨勬槸__stdcall(API)

__cdecl 鏄疌/C++鍜孧FC紼嬪簭榛樿浣跨敤鐨勮皟鐢ㄧ害瀹氾紝涔熷彲浠ュ湪鍑芥暟澹版槑鏃跺姞涓奯_cdecl鍏抽敭瀛楁潵鎵嬪伐鎸囧畾銆傞噰鐢╛_cdecl綰﹀畾鏃訛紝鍑芥暟鍙傛暟鎸夌収浠庡彸鍒板乏鐨勯『搴忓叆鏍堬紝騫朵笖鐢辮皟鐢ㄥ嚱鏁拌呮妸鍙傛暟寮瑰嚭鏍堜互娓呯悊鍫嗘爤銆傚洜姝わ紝瀹炵幇鍙彉鍙傛暟鐨勫嚱鏁板彧鑳戒嬌鐢ㄨ璋冪敤綰﹀畾銆傜敱浜庢瘡涓涓嬌鐢╛_cdecl綰﹀畾鐨勫嚱鏁伴兘瑕佸寘鍚竻鐞嗗爢鏍堢殑浠g爜錛屾墍浠ヤ駭鐢熺殑鍙墽琛屾枃浠跺ぇ灝忎細姣旇緝澶с俖_cdecl鍙互鍐欐垚_cdecl銆?
__stdcall璋冪敤綰﹀畾鐢ㄤ簬璋冪敤Win32 API鍑芥暟銆傞噰鐢╛_stdcall綰﹀畾鏃訛紝鍑芥暟鍙傛暟鎸夌収浠庡彸鍒板乏鐨勯『搴忓叆鏍堬紝琚皟鐢ㄧ殑鍑芥暟鍦ㄨ繑鍥炲墠娓呯悊浼犻佸弬鏁扮殑鏍堬紝鍑芥暟鍙傛暟涓暟鍥哄畾銆傜敱浜庡嚱鏁頒綋鏈韓鐭ラ亾浼犺繘鏉ョ殑鍙傛暟涓暟錛屽洜姝よ璋冪敤鐨勫嚱鏁板彲浠ュ湪榪斿洖鍓嶇敤涓鏉et n鎸囦護鐩存帴娓呯悊浼犻掑弬鏁扮殑鍫嗘爤銆俖_stdcall鍙互鍐欐垚_stdcall銆?
__fastcall 綰﹀畾鐢ㄤ簬瀵規ц兘瑕佹眰闈炲父楂樼殑鍦哄悎銆俖_fastcall綰﹀畾灝嗗嚱鏁扮殑浠庡乏杈瑰紑濮嬬殑涓や釜澶у皬涓嶅ぇ浜?涓瓧鑺傦紙DWORD錛夌殑鍙傛暟鍒嗗埆鏀懼湪ECX鍜孍DX瀵勫瓨鍣紝鍏朵綑鐨勫弬鏁頒粛鏃ц嚜鍙沖悜宸﹀帇鏍堜紶閫侊紝琚皟鐢ㄧ殑鍑芥暟鍦ㄨ繑鍥炲墠娓呯悊浼犻佸弬鏁扮殑鍫嗘爤銆俖_fastcall鍙互鍐欐垚_fastcall

3.

__stdcall:

_stdcall 璋冪敤綰﹀畾鐩稿綋浜?6浣嶅姩鎬佸簱涓粡甯鎬嬌鐢ㄧ殑PASCAL璋冪敤綰﹀畾銆?

 
鍦?2浣嶇殑VC++5.0涓璓ASCAL璋冪敤綰﹀畾涓嶅啀琚敮鎸侊紙瀹為檯涓婂畠宸茶瀹氫箟涓?__stdcall銆傞櫎浜哶_pascal澶栵紝__fortran鍜宊_syscall涔熶笉琚敮鎸侊級錛屽彇鑰屼唬涔嬬殑鏄痏_stdcall璋冪敤綰﹀畾銆備袱鑰呭疄璐ㄤ笂鏄竴鑷寸殑錛屽嵆鍑芥暟鐨勫弬鏁拌嚜鍙沖悜宸﹂氳繃鏍堜紶閫掞紝琚皟鐢ㄧ殑鍑芥暟鍦ㄨ繑鍥炲墠娓呯悊浼犻佸弬鏁扮殑鍐呭瓨鏍堬紝浣嗕笉鍚岀殑鏄嚱鏁板悕鐨勪慨楗伴儴鍒嗭紙鍏充簬鍑芥暟鍚嶇殑淇グ閮ㄥ垎鍦ㄥ悗闈㈠皢璇︾粏璇存槑錛夈?

_stdcall鏄疨ascal紼嬪簭鐨勭己鐪佽皟鐢ㄦ柟寮忥紝閫氬父鐢ㄤ簬Win32 Api涓紝鍑芥暟閲囩敤浠庡彸鍒板乏鐨勫帇鏍堟柟寮忥紝鑷繁鍦ㄩ鍑烘椂娓呯┖鍫嗘爤銆俈C灝嗗嚱鏁扮紪璇戝悗浼氬湪鍑芥暟鍚嶅墠闈㈠姞涓婁笅鍒掔嚎鍓嶇紑錛屽湪鍑芥暟鍚嶅悗鍔犱笂"@"鍜屽弬鏁扮殑瀛楄妭鏁般?

_cdecl:

_cdecl c璋冪敤綰﹀畾, 鎸変粠鍙寵嚦宸︾殑欏哄簭鍘嬪弬鏁板叆鏍堬紝鐢辮皟鐢ㄨ呮妸鍙傛暟寮瑰嚭鏍堛傚浜庝紶閫佸弬鏁扮殑鍐呭瓨鏍堟槸鐢辮皟鐢ㄨ呮潵緇存姢鐨勶紙姝e洜涓哄姝わ紝瀹炵幇鍙彉鍙傛暟鐨勫嚱鏁板彧鑳戒嬌鐢ㄨ璋冪敤綰﹀畾錛夈傚彟澶栵紝鍦ㄥ嚱鏁板悕淇グ綰﹀畾鏂歸潰涔熸湁鎵涓嶅悓銆?

_cdecl鏄疌鍜孋錛嬶紜紼嬪簭鐨勭己鐪佽皟鐢ㄦ柟寮忋傛瘡涓涓皟鐢ㄥ畠鐨勫嚱鏁伴兘鍖呭惈娓呯┖鍫嗘爤鐨勪唬鐮侊紝鎵浠ヤ駭鐢熺殑鍙墽琛屾枃浠跺ぇ灝忎細姣旇皟鐢╛stdcall鍑芥暟鐨勫ぇ銆傚嚱鏁伴噰鐢ㄤ粠鍙沖埌宸︾殑鍘嬫爤鏂瑰紡銆俈C灝嗗嚱鏁扮紪璇戝悗浼氬湪鍑芥暟鍚嶅墠闈㈠姞涓婁笅鍒掔嚎鍓嶇紑銆傛槸MFC緙虹渷璋冪敤綰﹀畾銆?

__fastcall:

__fastcall璋冪敤綰﹀畾鏄?浜?濡傚叾鍚嶏紝瀹冪殑涓昏鐗圭偣灝辨槸蹇紝鍥犱負瀹冩槸閫氳繃瀵勫瓨鍣ㄦ潵浼犻佸弬鏁扮殑錛堝疄闄呬笂錛屽畠鐢‥CX鍜孍DX浼犻佸墠涓や釜鍙屽瓧錛圖WORD錛夋垨鏇村皬鐨勫弬鏁幫紝鍓╀笅鐨勫弬鏁頒粛鏃ц嚜鍙沖悜宸﹀帇鏍堜紶閫侊紝琚皟鐢ㄧ殑鍑芥暟鍦ㄨ繑鍥炲墠娓呯悊浼犻佸弬鏁扮殑鍐呭瓨鏍堬級錛屽湪鍑芥暟鍚嶄慨楗扮害瀹氭柟闈紝瀹冨拰鍓嶄袱鑰呭潎涓嶅悓銆?

_fastcall鏂瑰紡鐨勫嚱鏁伴噰鐢ㄥ瘎瀛樺櫒浼犻掑弬鏁幫紝VC灝嗗嚱鏁扮紪璇戝悗浼氬湪鍑芥暟鍚嶅墠闈㈠姞涓?@"鍓嶇紑錛屽湪鍑芥暟鍚嶅悗鍔犱笂"@"鍜屽弬鏁扮殑瀛楄妭鏁般?

thiscall:

thiscall浠呬粎搴旂敤浜?C++"鎴愬憳鍑芥暟銆倀his鎸囬拡瀛樻斁浜嶤X瀵勫瓨鍣紝鍙傛暟浠庡彸鍒板乏鍘嬨倀hiscall涓嶆槸鍏抽敭璇嶏紝鍥犳涓嶈兘琚▼搴忓憳鎸囧畾銆?

naked call:

閲囩敤1-4鐨勮皟鐢ㄧ害瀹氭椂錛屽鏋滃繀瑕佺殑璇濓紝榪涘叆鍑芥暟鏃剁紪璇戝櫒浼氫駭鐢熶唬鐮佹潵淇濆瓨ESI錛孍DI錛孍BX錛孍BP瀵勫瓨鍣紝閫鍑哄嚱鏁版椂鍒欎駭鐢熶唬鐮佹仮澶嶈繖浜涘瘎瀛樺櫒鐨勫唴瀹廣?

naked call涓嶄駭鐢熻繖鏍風殑浠g爜銆俷aked call涓嶆槸綾誨瀷淇グ絎︼紝鏁呭繀欏誨拰_declspec鍏卞悓浣跨敤銆?

鍙﹂檮:

鍏抽敭瀛?__stdcall銆乢_cdecl鍜宊_fastcall鍙互鐩存帴鍔犲湪瑕佽緭鍑虹殑鍑芥暟鍓嶏紝涔熷彲浠ュ湪緙栬瘧鐜鐨凷etting...\C/C++ \Code Generation欏歸夋嫨銆傚綋鍔犲湪杈撳嚭鍑芥暟鍓嶇殑鍏抽敭瀛椾笌緙栬瘧鐜涓殑閫夋嫨涓嶅悓鏃訛紝鐩存帴鍔犲湪杈撳嚭鍑芥暟鍓嶇殑鍏抽敭瀛楁湁鏁堛傚畠浠搴旂殑鍛戒護琛屽弬鏁板垎鍒負/Gz銆?/Gd鍜?Gr銆傜己鐪佺姸鎬佷負/Gd錛屽嵆__cdecl銆?

瑕佸畬鍏ㄦā浠縋ASCAL璋冪敤綰﹀畾棣栧厛蹇呴』浣跨敤__stdcall璋冪敤綰﹀畾錛岃嚦浜庡嚱鏁板悕淇グ綰﹀畾錛屽彲浠ラ氳繃鍏跺畠鏂規硶妯′豢銆傝繕鏈変竴涓煎緱涓鎻愮殑鏄疻INAPI瀹忥紝Windows.h鏀寔璇ュ畯錛屽畠鍙互灝嗗嚭鍑芥暟緲昏瘧鎴愰傚綋鐨勮皟鐢ㄧ害瀹氾紝鍦╓IN32涓紝瀹冭瀹氫箟涓篲_stdcall銆備嬌鐢╓INAPI瀹忓彲浠ュ垱寤鴻嚜宸辯殑APIs銆?

鍚嶅瓧淇グ綰﹀畾

1銆佷慨楗板悕(Decoration name)
“C” 鎴栬?#8220;C++”鍑芥暟鍦ㄥ唴閮紙緙栬瘧鍜岄摼鎺ワ級閫氳繃淇グ鍚嶈瘑鍒備慨楗板悕鏄紪璇戝櫒鍦ㄧ紪璇戝嚱鏁板畾涔夋垨鑰呭師鍨嬫椂鐢熸垚鐨勫瓧絎︿覆銆傛湁浜涙儏鍐典笅浣跨敤鍑芥暟鐨勪慨楗板悕鏄繀瑕佺殑錛屽鍦ㄦā鍧楀畾涔夋枃浠墮噷澶存寚瀹氳緭鍑?#8220;C++”閲嶈澆鍑芥暟銆佹瀯閫犲嚱鏁般佹瀽鏋勫嚱鏁幫紝鍙堝鍦ㄦ眹緙栦唬鐮侀噷璋冪敤“C””鎴?#8220;C++”鍑芥暟絳夈?

淇グ鍚嶇敱鍑芥暟鍚嶃佺被鍚嶃佽皟鐢ㄧ害瀹氥佽繑鍥炵被鍨嬨佸弬鏁扮瓑鍏卞悓鍐沖畾銆?

2銆佸悕瀛椾慨楗扮害瀹氶殢璋冪敤綰﹀畾鍜岀紪璇戠綾?C鎴朇++)鐨勪笉鍚岃屽彉鍖栥傚嚱鏁板悕淇グ綰﹀畾闅忕紪璇戠綾誨拰璋冪敤綰﹀畾鐨勪笉鍚岃屼笉鍚岋紝涓嬮潰鍒嗗埆璇存槑銆?

a銆丆緙栬瘧鏃跺嚱鏁板悕淇グ綰﹀畾瑙勫垯錛?

__stdcall璋冪敤綰﹀畾鍦ㄨ緭鍑哄嚱鏁板悕鍓嶅姞涓婁竴涓笅鍒掔嚎鍓嶇紑錛屽悗闈㈠姞涓婁竴涓?#8220;@”絎﹀彿鍜屽叾鍙傛暟鐨勫瓧鑺傛暟錛屾牸寮忎負_functionname@number銆?

__cdecl璋冪敤綰﹀畾浠呭湪杈撳嚭鍑芥暟鍚嶅墠鍔犱笂涓涓笅鍒掔嚎鍓嶇紑錛屾牸寮忎負_functionname銆?

__fastcall璋冪敤綰﹀畾鍦ㄨ緭鍑哄嚱鏁板悕鍓嶅姞涓婁竴涓?#8220;@”絎﹀彿錛屽悗闈篃鏄竴涓?#8220;@”絎﹀彿鍜屽叾鍙傛暟鐨勫瓧鑺傛暟錛屾牸寮忎負@functionname@number銆?

瀹冧滑鍧囦笉鏀瑰彉杈撳嚭鍑芥暟鍚嶄腑鐨勫瓧絎﹀ぇ灝忓啓錛岃繖鍜孭ASCAL璋冪敤綰﹀畾涓嶅悓錛孭ASCAL綰﹀畾杈撳嚭鐨勫嚱鏁板悕鏃犱換浣曚慨楗頒笖鍏ㄩ儴澶у啓銆?

b銆丆++緙栬瘧鏃跺嚱鏁板悕淇グ綰﹀畾瑙勫垯錛?

__stdcall璋冪敤綰﹀畾錛?
1銆佷互“?”鏍囪瘑鍑芥暟鍚嶇殑寮濮嬶紝鍚庤窡鍑芥暟鍚嶏紱
2銆佸嚱鏁板悕鍚庨潰浠?#8220;@@YG”鏍囪瘑鍙傛暟琛ㄧ殑寮濮嬶紝鍚庤窡鍙傛暟琛紱
3銆佸弬鏁拌〃浠ヤ唬鍙瘋〃紺猴細
X--void 錛?
D--char錛?
E--unsigned char錛?
F--short錛?
H--int錛?
I--unsigned int錛?
J--long錛?
K--unsigned long錛?
M--float錛?
N--double錛?
_N--bool錛?
....
PA--琛ㄧず鎸囬拡錛屽悗闈㈢殑浠e彿琛ㄦ槑鎸囬拡綾誨瀷錛屽鏋滅浉鍚岀被鍨嬬殑鎸囬拡榪炵畫鍑虹幇錛屼互“0”浠f浛錛屼竴涓?#8220;0”浠h〃涓嬈¢噸澶嶏紱
4銆佸弬鏁拌〃鐨勭涓欏逛負璇ュ嚱鏁扮殑榪斿洖鍊肩被鍨嬶紝鍏跺悗渚濇涓哄弬鏁扮殑鏁版嵁綾誨瀷,鎸囬拡鏍囪瘑鍦ㄥ叾鎵鎸囨暟鎹被鍨嬪墠錛?
5銆佸弬鏁拌〃鍚庝互“@Z”鏍囪瘑鏁翠釜鍚嶅瓧鐨勭粨鏉燂紝濡傛灉璇ュ嚱鏁版棤鍙傛暟錛屽垯浠?#8220;Z”鏍囪瘑緇撴潫銆?

鍏舵牸寮忎負“?functionname@@YG*****@Z”鎴?#8220;?functionname@@YG*XZ”錛屼緥濡?
int Test1錛坈har *var1,unsigned long錛?----“?Test1@@YGHPADK@Z”
void Test2錛堬級 -----“?Test2@@YGXXZ”

__cdecl璋冪敤綰﹀畾錛?
瑙勫垯鍚屼笂闈㈢殑_stdcall璋冪敤綰﹀畾錛屽彧鏄弬鏁拌〃鐨勫紑濮嬫爣璇嗙敱涓婇潰鐨?#8220;@@YG”鍙樹負“@@YA”銆?

__fastcall璋冪敤綰﹀畾錛?
瑙勫垯鍚屼笂闈㈢殑_stdcall璋冪敤綰﹀畾錛屽彧鏄弬鏁拌〃鐨勫紑濮嬫爣璇嗙敱涓婇潰鐨?#8220;@@YG”鍙樹負“@@YI”銆?
VC++瀵瑰嚱鏁扮殑鐪佺己澹版槑鏄?#8220;__cedcl“,灝嗗彧鑳借C/C++璋冪敤.

CB鍦ㄨ緭鍑哄嚱鏁板0鏄庢椂浣跨敤4縐嶄慨楗扮鍙?
//__cdecl
cb鐨勯粯璁ゅ鹼紝瀹冧細鍦ㄨ緭鍑哄嚱鏁板悕鍓嶅姞_錛屽茍淇濈暀姝ゅ嚱鏁板悕涓嶅彉錛屽弬鏁版寜鐓т粠鍙沖埌宸︾殑欏哄簭渚濇浼犻掔粰鏍堬紝涔熷彲浠ュ啓鎴恄cdecl鍜宑decl褰㈠紡銆?
//__fastcall
濂逛慨楗扮殑鍑芥暟鐨勫弬鏁板皢灝借偗鍛㈡劅鍦頒嬌鐢ㄥ瘎瀛樺櫒鏉ュ鐞嗭紝鍏跺嚱鏁板悕鍓嶅姞@錛屽弬鏁版寜鐓т粠宸﹀埌鍙崇殑欏哄簭鍘嬫爤錛?
//__pascal
瀹冭鏄庣殑鍑芥暟鍚嶄嬌鐢≒ascal鏍煎紡鐨勫懡鍚嶇害瀹氥傝繖鏃跺嚱鏁板悕鍏ㄩ儴澶у啓銆傚弬鏁版寜鐓т粠宸﹀埌鍙崇殑欏哄簭鍘嬫爤錛?
//__stdcall
浣跨敤鏍囧噯綰﹀畾鐨勫嚱鏁板悕銆傚嚱鏁板悕涓嶄細鏀瑰彉銆備嬌鐢╛_stdcall淇グ鏃躲傚弬鏁版寜鐓х敱鍙沖埌宸︾殑欏哄簭鍘嬫爤錛屼篃鍙互鏄痏stdcall錛?

VC++瀵瑰嚱鏁扮殑鐪佺己澹版槑鏄?__cedcl",灝嗗彧鑳借C/C++璋冪敤.

娉ㄦ剰錛?

1銆乢beginthread闇瑕乢_cdecl鐨勭嚎紼嬪嚱鏁板湴鍧錛宊beginthreadex鍜孋reateThread闇瑕乢_stdcall鐨勭嚎紼嬪嚱鏁板湴鍧銆?

2銆佷竴鑸琖IN32鐨勫嚱鏁伴兘鏄痏_stdcall銆傝屼笖鍦╓indef.h涓湁濡備笅鐨勫畾涔夛細

#define CALLBACK __stdcall

#define WINAPI銆 __stdcall

3銆乪xtern "C" _declspec(dllexport) int __cdecl Add(int a, int b);

   typedef int (__cdecl*FunPointer)(int a, int b);

   淇グ絎︾殑涔﹀啓欏哄簭濡備笂銆?

4銆乪xtern "C"鐨勪綔鐢細濡傛灉Add(int a, int b)鏄湪c璇█緙栬瘧鍣ㄧ紪璇戯紝鑰屽湪c++鏂囦歡浣跨敤錛屽垯闇瑕佸湪c++鏂囦歡涓0鏄庯細extern "C" Add(int a, int b)錛屽洜涓篶緙栬瘧鍣ㄥ拰c++緙栬瘧鍣ㄥ鍑芥暟鍚嶇殑瑙i噴涓嶄竴鏍鳳紙c++緙栬瘧鍣ㄨВ閲婂嚱鏁板悕鐨勬椂鍊欒鑰冭檻鍑芥暟鍙傛暟錛岃繖鏍鋒槸浜嗘柟渚垮嚱鏁伴噸杞斤紝鑰屽湪c璇█涓笉瀛樺湪鍑芥暟閲嶈澆鐨勯棶棰橈級錛屼嬌鐢╡xtern "C"錛屽疄璐ㄥ氨鏄憡璇塩++緙栬瘧鍣紝璇ュ嚱鏁版槸c搴撻噷闈㈢殑鍑芥暟銆傚鏋滀笉浣跨敤extern "C"鍒欎細鍑虹幇閾炬帴閿欒銆?

涓鑸薄濡備笅浣跨敤錛?

#ifdef _cplusplus

#define EXTERN_C extern "C"

#else

#define EXTERN_C extern

#endif

#ifdef _cplusplus

extern "C"{

#endif

EXTERN_C int func(int a, int b);

#ifdef _cplusplus

}

#endif

5銆丮FC鎻愪緵浜嗕竴浜涘畯錛屽彲浠ヤ嬌鐢ˋFX_EXT_CLASS鏉ヤ唬鏇縚_declspec(DLLexport)錛屽茍淇グ綾誨悕錛屼粠鑰屽鍑虹被錛孉FX_API_EXPORT鏉ヤ慨楗板嚱鏁幫紝AFX_DATA_EXPORT鏉ヤ慨楗板彉閲?

AFX_CLASS_IMPORT錛歘_declspec(DLLexport)

AFX_API_IMPORT錛歘_declspec(DLLexport)

AFX_DATA_IMPORT錛歘_declspec(DLLexport)

AFX_CLASS_EXPORT錛歘_declspec(DLLexport)

AFX_API_EXPORT錛歘_declspec(DLLexport)

AFX_DATA_EXPORT錛歘_declspec(DLLexport)

AFX_EXT_CLASS錛?ifdef _AFXEXT

   AFX_CLASS_EXPORT

        #else

   AFX_CLASS_IMPORT

6銆丏LLMain璐熻矗鍒濆鍖?Initialization)鍜岀粨鏉?(Termination)宸ヤ綔錛屾瘡褰撲竴涓柊鐨勮繘紼嬫垨鑰呰榪涚▼鐨勬柊鐨勭嚎紼嬭闂瓺LL鏃訛紝鎴栬呰闂瓺LL鐨勬瘡涓涓繘紼嬫垨鑰呯嚎紼嬩笉鍐嶄嬌鐢―LL鎴栬呯粨鏉熸椂錛岄兘浼氳皟鐢―LLMain銆備絾鏄紝浣跨敤TerminateProcess鎴朤erminateThread緇撴潫榪涚▼鎴栬呯嚎紼嬶紝涓嶄細璋冪敤DLLMain銆?

7銆佷竴涓狣LL鍦ㄥ唴瀛樹腑鍙湁涓涓疄渚?

DLL紼嬪簭鍜岃皟鐢ㄥ叾杈撳嚭鍑芥暟鐨勭▼搴忕殑鍏崇郴錛?

1)銆丏LL涓庤繘紼嬨佺嚎紼嬩箣闂寸殑鍏崇郴

DLL妯″潡琚槧灝勫埌璋冪敤瀹冪殑榪涚▼鐨勮櫄鎷熷湴鍧絀洪棿銆?

DLL浣跨敤鐨勫唴瀛樹粠璋冪敤榪涚▼鐨勮櫄鎷熷湴鍧絀洪棿鍒嗛厤錛屽彧鑳借璇ヨ繘紼嬬殑綰跨▼鎵璁塊棶銆?

DLL鐨勫彞鏌勫彲浠ヨ璋冪敤榪涚▼浣跨敤錛涜皟鐢ㄨ繘紼嬬殑鍙ユ焺鍙互琚獶LL浣跨敤銆?

DLLDLL鍙互鏈夎嚜宸辯殑鏁版嵁孌碉紝浣嗘病鏈夎嚜宸辯殑鍫嗘爤錛屼嬌鐢ㄨ皟鐢ㄨ繘紼嬬殑鏍堬紝涓庤皟鐢ㄥ畠鐨勫簲鐢ㄧ▼搴忕浉鍚岀殑鍫嗘爤妯″紡銆?

2)銆佸叧浜庡叡浜暟鎹

DLL瀹氫箟鐨勫叏灞鍙橀噺鍙互琚皟鐢ㄨ繘紼嬭闂紱DLL鍙互璁塊棶璋冪敤榪涚▼鐨勫叏灞鏁版嵁銆備嬌鐢ㄥ悓涓 DLL鐨勬瘡涓涓繘紼嬮兘鏈夎嚜宸辯殑DLL鍏ㄥ眬鍙橀噺瀹炰緥銆傚鏋滃涓嚎紼嬪茍鍙戣闂悓涓鍙橀噺錛屽垯闇瑕佷嬌鐢ㄥ悓姝ユ満鍒訛紱瀵逛竴涓狣LL鐨勫彉閲忥紝濡傛灉甯屾湜姣忎釜浣跨敤DLL鐨勭嚎紼嬮兘鏈夎嚜宸辯殑鍊鹼紝鍒欏簲璇ヤ嬌鐢ㄧ嚎紼嬪眬閮ㄥ瓨鍌?TLS錛孴hread Local Strorage)銆?



]]>C涓嶤++鐩鎬簰璋冪敤http://m.shnenglu.com/Walker/articles/146992.html婕鑰吤?amp;鈥︹?錕?/dc:creator>婕鑰吤?amp;鈥︹?錕?/author>Mon, 23 May 2011 12:53:00 GMThttp://m.shnenglu.com/Walker/articles/146992.htmlhttp://m.shnenglu.com/Walker/comments/146992.htmlhttp://m.shnenglu.com/Walker/articles/146992.html#Feedback0http://m.shnenglu.com/Walker/comments/commentRss/146992.htmlhttp://m.shnenglu.com/Walker/services/trackbacks/146992.html 鍦ㄥ疄闄呭伐浣滀腑鍙兘緇忓父瑕佽繘琛孋鍜孋++鐨勬販鍚堢紪紼嬶紝C++璋冪敤C璇█鐨勪唬鐮侀氬父閮芥瘮杈冨鏄擄紝浣嗕篃鏈変竴浜涚粏鑺傞渶瑕佹敞鎰忋侰瑕佽皟鐢–++鐨勪唬鐮佸氨鐣ヤ負楹葷儲涓浜涳紝鍥犱負C涓嶆敮鎸侀潰鍚戝璞$殑鐗瑰緛銆?br />棣栧厛鎴戜滑鏉ョ湅涓涓婥++璋冪敤C璇█鐨勪唬鐮併傝璁╀綘鐨凜浠g爜鏃㈣兘琚獵浠g爜鍙堣兘琚獵++璋冪敤铏借瀹規槗錛屼絾鏄繕鏄湁闇瑕佹敞鎰忕殑鍦版柟銆傜幇鏈変笁涓枃浠跺垎鍒涓嬶細
/* file TestC.h */
#ifndef TESTC_H
#define TESTC_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
int add(int a, int b);
      
#ifdef __cplusplus
}
#endif
 
#endif /* TESTC_H */
 
 
/* file TestC.c */
 
#include "TestC.h"
 
int add(int a, int b)
{
    return (a + b);
}
 
 
/* file TestCpp.cpp */
#include "stdio.h"
#include "TestC.h"
 
int main()
{
       printf("add = %d\n", add(2, 5));
      
       return 0;
}
璇存槑錛?br />file TestC.h鏄疌鐨勫ご鏂囦歡錛宖ile TestC.c鏄叾瀹炵幇鏂囦歡錛宖ile TestCpp.cpp鏄皟鐢–鍑芥暟鐨凜++鏂囦歡銆?br />鏂囦歡TestC.h涓殑TESTC_H瀹氫箟鏄負浜嗗ご鏂囦歡淇濇姢錛?#8221; #ifdef __cplusplus”榪欎釜涓嶈兘緙哄皯錛屼綘鍙互鍘繪煡鐪婥鐨勬爣鍑嗗簱澶存枃浠朵腑閮芥湁榪欎釜錛屽”stdio.h”銆傛湁浜嗚繖涓畯緙栬瘧鍣ㄥ氨鐭ラ亾鐜板湪鏄疌榪樻槸C++鍦ㄨ皟鐢ㄥ畠銆?br />涓轟粈涔堣鍖哄垎C涓嶤++璋冪敤鍛紵鍏舵繁灞傛鍘熷洜鏄洜涓篊鍜孋++緙栬瘧鍣ㄥ湪緙栬瘧鍜岄摼鎺ユ椂瀵逛簬鍑芥暟鐨勫鐞嗕笉涓鏍楓侰++涓轟簡鏀寔鍑芥暟閲嶈澆鍦ㄧ紪璇戞椂浼氬姞鍏ュ嚱鏁板弬鏁板強綾誨瀷淇℃伅銆傚涓婇潰鐨刟dd鏂規硶錛孋緙栬瘧鍣ㄧ紪璇戝悗鍦ㄧ鍙峰簱涓殑鍚嶅瓧涓篲add錛岃孋++緙栬瘧鍣ㄥ垯浼氫駭鐢熷儚_add_int_int涔嬬被鐨勫悕瀛椼侰++姝f槸渚濋潬榪欑鏈哄埗瀹炵幇浜嗗嚱鏁扮殑閲嶈澆銆?br />extern鍏抽敭瀛楄〃紺哄皢鍑芥暟鎴栧彉閲忓0鏄庝負鍏ㄥ眬綾誨瀷錛屼笌涔嬬浉瀵瑰簲鐨勬槸static銆俿tatic闄愬畾鍑芥暟鎴栧彉閲忕殑浣滅敤鍩熶負鏈枃浠躲俥xtern榪樻湁涓涓綔鐢ㄥ氨鏄笌”C”榪炲湪涓璧蜂嬌鐢紝鍗砮xtern “C”閫氱煡緙栬瘧鍣ㄥ皢extern “C”鎵鍖呭惈鐨勪唬鐮佹寜鐓鐨勬柟寮忕紪璇戝拰閾炬帴銆?br /> 
涓嬮潰鎴戜滑灝辨潵鐪嬬湅濡備綍鍦–璇█涓嬌鐢–++鐨勪唬鐮侊紙鍖呮嫭C++綾葷殑鏂規硶錛夈備負浜嗙畝鍗曡搗瑙侊紝鎴戝皢綾葷殑瀹氫箟鍜屽疄鐜版斁鍦ㄤ竴涓枃浠朵腑(閫氬父搴旇鏄皢鍒嗗埆鏀懼湪.h鍜?cpp鏂囦歡涓?銆傝嚜瀹氫箟綾繪枃浠?榪欓噷鐪佺暐浜嗗ご鏂囦歡淇濇姢絳夊叾瀹冪粏鑺?濡備笅錛?br />//* file TestClass.h */
 
class HJH
{
public:
    int add(int a, int b)
       {
              return (a + b);
       }
};
 
灝咰++綾誨皝瑁呬負C鍑芥暟鐨勬枃浠訛紙涓轟簡綆鐣ヤ篃灝嗗0鏄庡拰瀹炵幇鏀懼湪浜嗗悓涓涓枃浠朵腑錛夊涓嬶細
/* file TestCpp.cpp */
 
#include "TestClass.h"
 
extern "C" int add_cpp(int a, int b);
 
int add_cpp(int a, int b)
{
       HJH hjh;
 
       return hjh.add(a, b);      
}
 
瀹為檯璋冪敤C++浠g爜鐨凜鏂囦歡濡備笅錛?br />/*file TestC.c */
#include "stdio.h"
 
extern int add_cpp(int a, int b);
 
int main()
{
       printf("add_cpp = %d\n", add_cpp(2, 5));
      
       return 0;
}
涓婇潰鐨勮繃紼嬪緢娓呮櫚錛屽氨鏄敤涓涓嚱鏁板皢C++綾葷殑浣跨敤灝佽璧鋒潵錛岀劧鍚庡皢瀹冨閮ㄥ0鏄庝負C鍑芥暟灝卞彲浠ヤ簡銆?br />鏂囦歡TestClass.h瀹氫箟騫跺疄鐜頒簡涓涓被錛岃綾誨彧鏈変竴涓猘dd鏂規硶銆傛枃浠禩estCpp.cpp瀹氫箟騫跺疄鐜頒簡涓涓嚱鏁癮dd_cpp錛屽嚱鏁頒腑瀹氫箟浜嗕竴涓狧JH綾誨璞″茍璋冪敤浜嗚瀵硅薄鐨刟dd鏂規硶銆傜劧鍚庡皢add_cpp鍑芥暟榪涜澶栭儴澹版槑涓篊銆?br />TestC.c鏂囦歡涓負浜嗕嬌鐢╝dd_cpp鍑芥暟錛屼篃闇瑕佽繘琛屽閮ㄥ0鏄庛傝繖鏄負浜嗛氱煡緙栬瘧鍣ㄨ鏄庤繖涓嚱鏁版槸鍦ㄥ叾浠栨枃浠朵腑瀹炵幇錛堟敞鎰忓湪C鏂囦歡涓殑extern鍚庨潰涓嶅彲鍔?#8221;C”錛夈傚綋榪欎笁涓枃浠朵竴璧風紪璇戦摼鎺ユ椂錛岀紪璇戝櫒灝卞彲浠ユ壘鍒癮dd_cpp鐨勫叿浣撳疄鐜般?/p>

鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/gobitan/archive/2007/03/18/1532769.aspx



]]>
杞珿etUserDefaultLangID,GetSystemDefaultLangID,GetUserDefaultUILanguage姣旇緝http://m.shnenglu.com/Walker/articles/146720.html婕鑰吤?amp;鈥︹?錕?/dc:creator>婕鑰吤?amp;鈥︹?錕?/author>Wed, 18 May 2011 23:24:00 GMThttp://m.shnenglu.com/Walker/articles/146720.htmlhttp://m.shnenglu.com/Walker/comments/146720.htmlhttp://m.shnenglu.com/Walker/articles/146720.html#Feedback0http://m.shnenglu.com/Walker/comments/commentRss/146720.htmlhttp://m.shnenglu.com/Walker/services/trackbacks/146720.html 

榪欎笁涓嚱鏁伴兘鏄緱鍒拌璦ID錛屼絾鏄嬌鐢ㄧ殑鍦哄悎涓婂嵈鏄湁鎵涓嶅悓錛屼笅闈㈠厛緇欏嚭涓変釜鍑芥暟鐨勫師鍨嬪拰瑙i噴錛?br />GetUserDefaultLangID
Returns the language identifier for the current user locale.

LANGID GetUserDefaultLangID(void);
Parameters
This function has no parameters.

Return Values
Returns the language identifier for the current user locale.

GetSystemDefaultLangID
Returns the language identifier for the system locale.

LANGID GetSystemDefaultLangID(void);
Parameters
This function has no parameters.

Return Values
Returns the language identifier for the system locale.

GetUserDefaultUILanguage
Retrieves the user UI language for the current user. If the current user has not set a language, GetUserDefaultUILanguage returns the language identifier for the system default UI language.

LANGID GetUserDefaultUILanguage(void);
Parameters
This function has no parameters.

Return Value
Returns the language identifier for the user UI language for the current user.

瑕佺悊瑙h繖涓変釜鍑芥暟鐨勪嬌鐢ㄥ厛瑕佺湅鐪嬫帶鍒墮潰鏉?>鍖哄煙鍜岃璦閫夐」錛?br />絎竴欏典唬琛ㄦ暟瀛楄揣甯佹椂闂達紝絎簩欏墊槸緋葷粺UI鍜岃蔣浠剁晫闈紝絎笁欏甸珮綰ф槸闈瀠nicode紼嬪簭鐣岄潰璇█銆?br />涓嬮潰鏄繖涓変釜欏甸潰璁劇疆鏃訛紝涓嶅悓鐨勫嚱鏁扮殑緇撴灉錛?br />                          鍖哄煙閫夐」       璇█         楂樼駭
GetUserDefaultLangID        鏀瑰彉          涓嶅彉        涓嶅彉     
GetSystemDefaultLangID       涓嶅彉          涓嶅彉       鏀瑰彉
GetUserDefaultUILanguage      鏀瑰彉          鏀瑰彉       涓嶅彉
鐢變簺鍙錛孏etUserDefaultUILanguage浼氬拰緋葷粺UI鐨勮璦涓鑷達紝鎵浠ユ垜浠緩璁湪鍐橴NICODE紼嬪簭鐣岄潰鏃剁敤榪欎釜
鍑芥暟浼氬ソ浜涳紝鍜孫S鐨刄I涓鑷達紝涓嶄細璁╁浜鴻寰楀緢濂囨?/p>

 

鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/nanjian011/archive/2009/10/23/4716903.aspx

 



]]>
璋冭瘯Release鍙戝竷鐗堢▼搴忕殑Crash閿欒 錛堣漿錛?/title><link>http://m.shnenglu.com/Walker/articles/146153.html</link><dc:creator>婕鑰吤?amp;鈥︹?錕?/dc:creator><author>婕鑰吤?amp;鈥︹?錕?/author><pubDate>Tue, 10 May 2011 23:53:00 GMT</pubDate><guid>http://m.shnenglu.com/Walker/articles/146153.html</guid><wfw:comment>http://m.shnenglu.com/Walker/comments/146153.html</wfw:comment><comments>http://m.shnenglu.com/Walker/articles/146153.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Walker/comments/commentRss/146153.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Walker/services/trackbacks/146153.html</trackback:ping><description><![CDATA[<h2><a id=viewpost1_TitleUrl href="http://m.shnenglu.com/woaidongmao/archive/2011/05/10/146092.html">璋冭瘯Release鍙戝竷鐗堢▼搴忕殑Crash閿欒</a> </h2> <div> <p><a title=http://blog.sina.com.cn/s/blog_48f93b530100fsln.html >http://blog.sina.com.cn/s/blog_48f93b530100fsln.html</a></p> <p> </p> <p><span>鍦?span>Windows</span>騫沖彴涓嬬敤<span>C++</span>寮鍙戝簲鐢ㄧ▼搴忥紝鏈涓嶆兂瑙佸埌鐨勬儏鍐墊亹鎬曞氨鏄▼搴忓穿婧冿紝鑰岃鎯寵В鍐沖紩璧烽棶棰樼殑<span>bug</span>錛屾渶鍥伴毦鐨勫簲璇ュ氨鏄皟璇?span>release</span>鐗堟湰浜嗐傚洜涓?span>release</span>鐗堟湰鏉ュ氨灝戜簡寰堝璋冭瘯淇℃伅錛屾洿浣曞喌涓鑸兘鏄彂甯冨嚭鍘葷敱鐢ㄦ埛浣跨敤錛?span>crash</span>鐨勭幇鍦哄緢闅句繚鐣欏拰閲嶇幇銆傛湰鏂囧皢緇欏嚭鍑犱釜瑙e喅鏂規錛屽畬鎴愬<span>release</span>鐗堝簲鐢ㄧ▼搴?span>crash</span>閿欒鐨勮皟璇曘傦紙鏈枃鍙璁?span>Windows</span>騫沖彴<span>MSVC</span>鐜涓嬬殑璋冭瘯錛屽浜庡叾浠栧鉤鍙板拰寮鍙戠幆澧冩病鏈夊叧娉紝璇峰ぇ瀹惰嚜宸卞熼壌鍜屽皾璇曘傦級</span></span></span></p> <p> <wbr></p> <p><span> <wbr> <wbr>  </span><wbr><strong><span>鏂規涓錛氬穿婧冨湴鍧</span></strong><span> <span xml:lang="EN-US"><strong><span>+ MAP</span></span>鏂囦歡</strong></span></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr></span> </span><span>榪欑鏂規鍙兘瀵?span xml:lang="EN-US"><span>VC7</span></span>浠ュ墠鐨勭増鏈紑鍙戠殑紼嬪簭浣跨敤銆?span xml:lang="EN-US"><span> <wbr></span></span></p> </span> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr> <strong>1</strong></span></span><strong><span>銆佸穿婧冨湴鍧</span></strong></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr> <wbr> <wbr></span><span>鎵璋撳穿婧冨湴鍧灝辨槸寮曡搗紼嬪簭宕╂簝鐨勫唴瀛樺湴鍧錛屽湪</span><span><span xml:lang="EN-US">WinXP</span></span><span>涓嬪簲鐢ㄧ▼搴?/span><span><span xml:lang="EN-US">crash</span></span><span>鐨勫璇濇濡備笅鍥撅細</span></span></p> <p align=center><span><a target=_blank><span><span><img title=clip_image001 border=0 alt=clip_image001 src="http://m.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/ReleaseCrash_A881/clip_image001_0ad42579-f1c9-44ae-b2f8-b50b8a737e0d.jpg" width=424 height=181 v:shapes="_x0000_i1025"></span></span></a></span></p> <p align=center><span><a target=_blank><span><span><img title=clip_image002 border=0 alt=clip_image002 src="http://m.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/ReleaseCrash_A881/clip_image002_cb3f00fa-aa22-4301-a42c-92c12dff2ea4.jpg" width=494 height=120 v:shapes="_x0000_i1026" real_src="http://s7.sinaimg.cn/bmiddle/48f93b53g79aad2c60546&690"></span></span></a></span></p> <p align=center><span><a target=_blank><span><span><img title=clip_image003 border=0 alt=clip_image003 src="http://m.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/ReleaseCrash_A881/clip_image003_fea81ac9-41ea-42be-a24f-d0fe99dafa80.jpg" width=494 height=380 v:shapes="_x0000_i1027" real_src="http://s2.sinaimg.cn/bmiddle/48f93b53g79aad34a5521&690"></span></span></a></span></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr></span> </span><span><span>涓婇潰絎?/span><span><span xml:lang="EN-US">2</span></span><span>寮犲浘涓敾綰㈢嚎鐨勫間負</span><span><span xml:lang="EN-US">crash</span></span><span>鐨勪唬鐮佸亸縐誨湴鍧錛岀</span><span><span xml:lang="EN-US">3</span></span><span>寮犲浘涓哄嵆</span><span><span xml:lang="EN-US">crash</span></span><span>緇濆鍦板潃錛涗竴鑸紩璧?/span><span><span xml:lang="EN-US">crash</span></span><span>鐨勫師鍥犲涓哄唴瀛樻搷浣滈敊璇紝鎴戜滑鐢ㄨ繖涓や釜鍦板潃鍜?/span><span><span xml:lang="EN-US">MAP</span></span><span>鏂囦歡灝辮兘瀹氫綅鍑洪敊鐨勪唬鐮佽銆?/span></span></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr> <strong>2</strong></span></span><strong><span>銆?span xml:lang="EN-US"><span>MAP</span></span>鏂囦歡</span></strong></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr> MAP</span></span><span>鏂囦歡鏄褰曞簲鐢ㄧ▼搴忎俊鎭殑鏂囦歡錛堟枃鏈枃浠訛級錛岄噷闈㈠ぇ姒傚寘鍚簡紼嬪簭鐨勫叏灞絎﹀彿銆佹簮鐮佹ā鍧楀悕銆佹簮鐮佹枃浠跺拰琛屽彿絳変俊鎭紝鑰岃繖浜涗俊鎭兘澶熷府鍔╂垜浠畾浣嶅嚭閿欑殑浠g爜琛屻?/span></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr></span> </span><span>鎬庢牱鐢熸垚<span xml:lang="EN-US"><span>MAP</span></span>鏂囦歡鍛紵浠?span xml:lang="EN-US"><span>VC6</span></span>涓轟緥錛屽湪 <span xml:lang="EN-US"><span>Project Settings -> C/C++ <wbr>-> Debug info</span></span>涓紝閫夋嫨 <span xml:lang="EN-US"><span>Line Numbers Only</span> </span>錛涘湪 <span xml:lang="EN-US"><span>Project Settings -> Link</span> </span>涓紝閫夋嫨 <span xml:lang="EN-US"><span>Generate mapfile</span></span>欏癸紝騫跺湪<span xml:lang="EN-US"><span>Project Options</span> </span>閲岄潰杈撳叆 </span><span xml:lang="EN-US"><span>/MAPINFO:LINES</span></span><span> </span><span>鍜?/span><span> <span><span xml:lang="EN-US">/MAPINFO:EXPORTS</span></span>錛岄噸鏂扮紪璇戠▼搴忓氨浼氱敓鎴?span xml:lang="EN-US"><span>.map</span></span>鏂囦歡銆?/span></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr></span> </span><span>浠ヤ笂璁劇疆瀵瑰簲鐨勭紪璇戦摼鎺ラ夐」鍒嗗埆鍒嗭細</span></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr></span> </span><strong><span xml:lang="EN-US"><span>/Zi</span></span></strong><span> </span><span>鈥?琛ㄧず鐢熸垚<span xml:lang="EN-US"><span>pdb</span></span>璋冭瘯淇℃伅錛?/span></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr></span> </span><strong><span xml:lang="EN-US"><span>/MAP[:filename]</span></span></strong><span> </span><span>鈥?琛ㄧず鐢熸垚<span xml:lang="EN-US"><span>map</span></span>鏂囦歡鍚嶏紱</span></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr></span> </span><strong><span xml:lang="EN-US"><span>/MAPINFO:EXPORTS <wbr></span></strong></span><span>鈥?琛ㄧず鐢熸垚鐨?span xml:lang="EN-US"><span>map</span></span>鏂囦歡涓姞鍏?span xml:lang="EN-US"><span>exported functions</span></span>錛堢敓鎴?span xml:lang="EN-US"><span>DLL</span></span>鏂囦歡鏃訛級錛?/span></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr></span> </span><strong><span xml:lang="EN-US"><span>/MAPINFO:LINES <wbr></span></strong></span><span>鈥?琛ㄧず鐢熸垚鐨?span xml:lang="EN-US"><span>map</span></span>鏂囦歡涓姞鍏ヤ唬鐮佽淇℃伅銆?/span></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr></span> </span><span>鐢變簬<span xml:lang="EN-US"><span>/MAPINFO:LINES</span></span>閫夐」鍦?span xml:lang="EN-US"><span>VC8</span></span>浠ュ悗鐨勭増鏈腑涓嶅啀鏀寔錛屽洜姝ら氳繃<span xml:lang="EN-US"><span>MAP</span></span>鏂囦歡涓殑淇℃伅鍜?span xml:lang="EN-US"><span>crash</span></span>鍦板潃瀹氫綅鍑洪敊浠g爜琛屽氨姣旇緝鍥伴毦浜嗭紝鎵浠ヨ繖縐嶆柟妗堝彧鑳藉湪<span xml:lang="EN-US"><span>VC7</span></span>鍙婁互鍓嶇殑鐗堟湰涓嬌鐢ㄣ?/span></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr> <wbr></span><span>涓涓?/span><span><span xml:lang="EN-US">MAP</span></span><span>鏂囦歡鐗囨紺轟緥濡備笅錛?/span><span><span xml:lang="EN-US"> <wbr></span></span></p> </span> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr> <a target=_blank><span><span><img title=clip_image004 border=0 alt=clip_image004 src="http://m.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/ReleaseCrash_A881/clip_image004_fbf07de5-1b63-4473-917f-f6695904c9be.jpg" width=494 height=229 v:shapes="_x0000_i1028" real_src="http://s4.sinaimg.cn/bmiddle/48f93b53g79aae50a0e23&690"></span></span> <wbr></a> <wbr></span></p> </span> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr> <a target=_blank><span><span><img title=clip_image005 border=0 alt=clip_image005 src="http://m.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/ReleaseCrash_A881/clip_image005_93f97fcb-0900-4f57-baf2-29a04f821fa2.jpg" width=494 height=227 v:shapes="_x0000_i1029" real_src="http://s1.sinaimg.cn/bmiddle/48f93b53g79aae6db2060&690"></span></span></a></span></p> </span> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr></span> </span><span><span>鍥句腑</span><span><span xml:lang="EN-US">Rva+Base</span></span><span>鍒楃殑鍦板潃涓鴻琛屽嚱鏁板搴旂殑鍑芥暟緇濆鍦板潃錛?/span><span><span xml:lang="EN-US">Address</span></span><span>鍒椾腑鍐掑彿鍚庨潰鐨勫湴鍧涓哄嚱鏁扮浉瀵瑰亸縐誨湴鍧銆?/span><span><span xml:lang="EN-US"> <wbr> <wbr> <wbr></span></span></p> </span> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr> <strong>3</strong></span></span><strong><span>銆佸畾浣?span xml:lang="EN-US"><span>crash</span></span>浠g爜</span></strong></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr></span> </span><span>鏈変簡涓婇潰鐨勪粙緇嶏紝瀹氫綅<span xml:lang="EN-US"><span>crash</span></span>浠g爜灝卞緢綆鍗曚簡銆傜敤涓嬮潰鐨勫叕寮忔潵榪涜瀹氫綅錛?/span></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr></span> </span><strong><span>宕╂簝琛屽亸縐?<span xml:lang="EN-US"><span>=</span> </span>宕╂簝鍦板潃 <span xml:lang="EN-US"><span>-</span> </span>宕╂簝鍑芥暟緇濆鍦板潃 <span xml:lang="EN-US"><span>+</span> </span>鍑芥暟鐩稿鍋忕Щ</span></strong></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr></span> </span><span>鎴戜滑棣栧厛鏍規嵁宕╂簝鍦板潃錛堢粷瀵瑰湴鍧錛夛紝鎸夌収鎵懼埌絎?span xml:lang="EN-US"><span>2</span></span>寮犲浘涓?span xml:lang="EN-US"><span>Rva+Base</span></span>鍒楃殑鍦板潃鎵懼埌鍙戠敓宕╂簝鐨勫嚱鏁幫紙鍗沖穿婧冨湴鍧澶т簬璇ュ嚱鏁拌鐨?span xml:lang="EN-US"><span>Rva+Base</span></span>鍦板潃涓斿皬浜庝笅涓嚱鏁扮殑鍦板潃錛夛紝鐒跺悗鎵懼埌璇ヨ瀵瑰簲鐨勫嚱鏁扮浉瀵瑰亸縐誨湴鍧錛屽甫鍏ュ叕寮忎腑錛屽氨寰楀埌浜嗗穿婧冭鍋忕Щ錛岃鍊艱〃紺哄穿婧冭鐨勪唬鐮佺浉瀵逛簬浠g爜鎵鍦ㄥ嚱鏁扮殑鍋忕Щ閲忋傜敤璇ュ煎幓涓庣<span xml:lang="EN-US"><span>3</span></span>寮犲浘涓搴斿嚱鏁板啋鍙峰悗闈㈢殑鍋忕Щ閲忓幓姣旇緝錛屾渶鎺ヨ繎鐨勫煎墠闈㈢殑閭d釜鍗佽繘鍒舵暟鍗充負浠g爜鎵鍦ㄥ嚱鏁頒腑鐨勮鍙楓?/span></p> <p><span xml:lang="EN-US"><span> <wbr> <wbr> <wbr> ok</span></span><span>錛屽埌姝ゆ垜浠凡緇忔垚鍔熸壘鍒頒簡宕╂簝鐨勪唬鐮佽錛屽彧涓嶈繃榪欑鏂規硶榪樻槸姣旇緝璐瑰姏錛屽茍涓旈檺鍒舵瘮杈冨錛屾垜浠湅鐪嬩笅闈㈢殑鏂規銆?/span></p> <p><span>涓婄瘒緇欏嚭鐨勬柟妗堜竴榪樿琛ュ厖鍑犲彞銆傞氳繃<span>“crash</span>鍦板潃<span> + MAP</span>鏂囦歡<span>”</span>鏉ュ畾浣嶅嚭閿欎唬鐮佷綅緗櫧鐒墮渶瑕佺粡榪囨瘮杈冨鏉傜殑鍦板潃璁$畻錛屼絾鍗存槸鏈綆鍗曞疄鐜扮殑鏂瑰紡銆傚鏋滀粎浠呮兂閫氳繃宕╂簝鍦板潃瀹氫綅鍑洪敊鐨勫嚱鏁幫紝灝辨洿鍔犳柟渚夸簡銆傛垜鍦ㄧ綉涓婃壘鍒頒竴涓В鏋?span>MAP</span>鏂囦歡鐨勫皬宸ュ叿錛屽彲浠ラ潪甯告竻鏅扮殑鍒楀嚭姣忎釜鍑芥暟鐨勫湴鍧錛屽茍涓斿彲浠ュ皢鍒嗘瀽琛ㄦ牸瀵煎嚭涓?span>Excel</span>鏂囦歡銆傚伐鍏蜂笅杞藉湴鍧錛?span><a ><span>http://e.ys168.com/?tinyfun</span></a></span>錛屽伐鍏風洰褰曚笅<span>VCMapper.exe</span>銆?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鍙﹀涓婄瘒涓昏鍙傝冧袱綃囨枃绔狅細</span></p> <p><span> <wbr> <wbr> <wbr> <a ><span>http://www.vckbase.com/document/viewdoc/?id=908</span></a></span></p> <p><span> <wbr> <wbr> <wbr> <a ><span>http://www.vckbase.com/document/viewdoc/?id=1473</span></a></span></p> <p> <wbr></p> <p><span> <wbr> <wbr> <wbr> </span><strong><span>鏂規浜岋細宕╂簝鍦板潃<span> + MAP</span>鏂囦歡<span> + COD</span>鏂囦歡</span></strong></p> <p><span> <wbr> <wbr> <wbr> </span><span>鐢變簬<span>VC8</span>浠ュ悗鐨勭増鏈兘涓嶅啀鏀寔<span>MAP</span>鏂囦歡涓駭鐢熶唬鐮佽淇℃伅錛屽洜姝ゆ垜浠鎵懼彟涓縐嶅畾浣嶆柟寮忥細<span>COD</span>鏂囦歡銆?/span></p> <p><span> <wbr> <wbr> <wbr> <strong><span>1</span></strong></span><strong><span>銆?span>COD</span>鏂囦歡</span></strong></p> <p><span> <wbr> <wbr> <wbr> COD</span><span>鏂囦歡鏄竴涓寘鍚簡姹囩紪鐮併佷簩榪涘埗鏈哄櫒鐮佸拰婧愪唬鐮佸搴斾俊鎭殑鏂囦歡錛屾瘡涓涓?span>cpp</span>閮藉搴斾竴涓?span>COD</span>鏂囦歡銆傞氳繃榪欎釜鏂囦歡錛屾垜浠彲浠ラ潪甯告柟渚垮湴榪涜瀹氫綅銆?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鍦?span>VC6</span>涓敓鎴?span>COD</span>鏂囦歡鐨勮緗柟寮忎負錛?span>Project Settings -> C/C++</span>錛屽湪<span> Category </span>涓?span> Listing Files</span>錛屽湪<span> Listing file type </span>緇勫悎妗嗕腑閫?span> Assembly</span>錛?span>Machine code</span>錛?span>and source</span>銆傚湪<span>VC8</span>涓敓鎴?span>COD</span>鏂囦歡鐨勮緗柟寮忎負錛?span>Project Properties -> C/C++ -> Output Files -> Assembler Output </span>欏癸紝閫夋嫨<span> Assembly</span>錛?span>Machine code</span>錛?span>and Source(/Facs)</span>銆?/span></p> <p><span> <wbr> <wbr> </span><wbr></p> <p><span> <wbr> <wbr> <wbr> <strong><span>2</span></strong></span><strong><span>銆佸畾浣嶅穿婧冭</span></strong></p> <p><span> <wbr> <wbr> <wbr> </span><span>涓嬮潰閫氳繃涓句緥榪涜璇存槑銆傜幇鍦ㄦ垜鏈変竴涓熀浜庡璇濇鐨?span>MFC</span>搴旂敤紼嬪簭<span>CrashTest</span>錛屽湪<span>CCrashTestDlg::OnInitDialog</span>鍑芥暟涓啓鍏ュ鑷?span>crash</span>鐨勪唬鐮佽鍙ワ紙絎?span>99</span>琛岋級錛屾簮鏂囦歡濡備笅錛?/span></p> <p><span> <wbr> <wbr> <wbr> <a target=_blank><span><span><img title=clip_image006 border=0 alt=clip_image006 src="http://m.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/ReleaseCrash_A881/clip_image006_887560ee-8b72-42ea-a623-220dcb47ac1f.jpg" width=360 height=169 v:shapes="_x0000_i1030"></span></span></a></span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鏍規嵁宕╂簝鍦板潃錛?span>0x<st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="4012" unitname="a">004012A</st1:chmetcnv>3</span>錛変互鍙?span>MAP</span>鏂囦歡錛堝畾浣嶇墖孌靛浘鐗囧涓嬶級錛屽畾浣?span>crash</span>鍑芥暟涓?span>OnInitDialog</span>錛涘茍涓旀垜浠彲浠ュ緢瀹規槗鍦拌綆楀嚭宕╂簝鍦板潃鐩稿浜庡穿婧冨嚱鏁扮殑鍋忕Щ閲忎負<span> 0x<st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="4012" unitname="a">004012A</st1:chmetcnv>3 - 0x004011E0 = 0xC3</span>銆?/span></p> <p><span> <wbr> <wbr> <wbr> <a target=_blank><span><span><img title=clip_image007 border=0 alt=clip_image007 src="http://m.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/ReleaseCrash_A881/clip_image007_dc9962ce-f969-4c7f-aa0b-e973cac321ce.jpg" width=494 height=36 v:shapes="_x0000_i1031" real_src="http://s11.sinaimg.cn/bmiddle/48f93b53g79bbc5f052da&690"></span></span></a></span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鍐嶆潵鐪嬬湅<span>CrashTestDlg.cod</span>鏂囦歡錛屾垜浠牴鎹枃浠朵腑婧愮爜淇℃伅鎵懼埌<span>OnInitDialog</span>鍑芥暟淇℃伅鐗囨錛?/span></p> <p><span> <wbr> <wbr> <wbr> <a target=_blank><span><span><img title=clip_image008 border=0 alt=clip_image008 src="http://m.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/ReleaseCrash_A881/clip_image008_00ac91bc-99ca-4d4f-86cd-b0d1d23bb10a.jpg" width=494 height=231 v:shapes="_x0000_i1032" real_src="http://s4.sinaimg.cn/bmiddle/48f93b53g79bc3c02d3f3&690"></span></span></a></span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鍙互鐪嬪埌鍥劇墖涓涓琛屼負<span>OnInitDialog</span>鍑芥暟姹囩紪浠g爜鐨勮搗濮嬭錛涙壘鍒?span>“int * p = NULL;”</span>榪欎竴鍙ユ簮鐮侊紝鍏跺墠闈㈢殑<span>98</span>琛ㄧず榪欒浠g爜鍦ㄦ簮鏂囦歡涓殑琛屽彿錛屼笅闈㈢殑<st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="C"><span>000c</span></st1:chmetcnv><span>1</span>琛ㄧず鐩稿浜庡嚱鏁板紑濮嬩綅緗殑鍋忕Щ閲忥紝鍚庨潰鐨?span>“<st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="True" sourcevalue="33" unitname="C">33 c</st1:chmetcnv><st1:chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="0" unitname="”">0”</st1:chmetcnv></span>涓烘満鍣ㄧ爜錛?span>“xor eax</span>錛?span>eax”</span>涓烘眹緙栫爜銆傞偅涔堟垜浠牴鎹墠闈㈢畻鍑烘潵鐨勫亸縐婚噺<span>0xC3</span>錛屾壘鍒板搴斿嚭閿欑殑璇彞涓?span>99</span>琛岋細<span>“*p = 5;”</span>銆?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鎬葷粨涓涓嬪畾浣嶆楠わ細</span></p> <p><span> <wbr> <wbr> <wbr> 1) </span><span>鏍規嵁鍏紡 <strong><span>宕╂簝璇彞鍦ㄥ嚱鏁頒腑鍋忕Щ鍦板潃<span> = </span>宕╂簝鍦板潃<span> - </span>宕╂簝鍑芥暟鍦板潃</span></strong> 璁$畻鍑哄亸縐婚噺<span>X</span>錛?/span></p> <p><span> <wbr> <wbr> <wbr> 2) </span><span>鏍規嵁鍏紡 <strong><span>宕╂簝璇彞鍦?span>COD</span>鏂囦歡涓湴鍧<span> = </span>宕╂簝鍑芥暟鍦?span>COD</span>鏂囦歡涓湴鍧<span> + <wbr>X</span></span></strong><span> </span>璁$畻鍑哄湴鍧<span>Y</span>銆傚叾涓穿婧冨嚱鏁板湪<span>COD</span>鏂囦歡涓湴鍧涓?span>COD</span>鏂囦歡涓嚱鏁拌搗濮嬫嫭鍙?span>“{”</span>鍚庨潰琛ㄦ槑鐨勫湴鍧錛屼竴鑸儏鍐典笅涓?span>0x0000</span>錛?/span></p> <p><span> <wbr> <wbr> <wbr> 3) </span><span>鏍規嵁<span>Y</span>鍦?span>COD</span>鏂囦歡涓壘鍒板搴斾唬鐮佽銆?/span></p> <p><span> <wbr> <wbr> </span><wbr></p> <p><span> <wbr> <wbr> <wbr> ok</span><span>錛屾柟妗堜簩浠嬬粛瀹屼簡銆傝繖縐嶆柟娉曟渶澶х殑濂藉鏄病鏈?span>VC</span>寮鍙戠幆澧冪増鏈檺鍒訛紝鑰屼笖<span>COD</span>鏂囦歡閲岄潰鍖呭惈鐨勪俊鎭洿鍔犱赴瀵岋紝涓嶄絾鍙互甯姪鎴戜滑瀹氫綅<span>crash</span>錛岃繕鑳藉府鎴戜滑鍒嗘瀽寰堝涓滆タ銆傚綋鐒訛紝榪欎篃瀵艱嚧緙栬瘧鐢熸垚浜嗗緢澶氫俊鎭枃浠躲?/span></p> <p><span>鏍規嵁鍓嶉潰涓ょ瘒鍗氭枃錛屾垜浠瀹氫綅宕╂簝琛屼唬鐮侊紝蹇呴』瑕佽嚜宸辨牴鎹浉鍏充俊鎭枃浠惰繘琛岃綆椼傚鏋滈渶瑕佸鐞嗙殑閲忔瘮杈冨ぇ錛屾亹鎬曚細寰堣垂鍔涙皵銆傛湁娌℃湁鏇寸畝鍗曞揩閫熺殑鍔炴硶鍛紵</span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鏈鐩存帴鐨勬兂娉曞氨鏄啓涓涓皬宸ュ叿錛屾牴鎹鍒欏拰淇℃伅榪涜鑷姩瀹氫綅錛屼笉榪囧紑鍙戣搗鏉ヤ篃鏄璐逛竴鐣姛澶殑銆備護浜哄紑蹇冪殑鏄紝鎴戜滑鍙互鎵懼埌綾諱技鐨勫伐鍏鳳紝鑰屼笖鏄紑婧愬厤璐圭殑錛佺▼搴忓憳鐨勪笘鐣屼篃璁稿緢澶氭椂鍊欓兘鏄繖涔堝崟綰屼箰浜庡垎浜紒</span></p> <p><span> <wbr> <wbr> </span><wbr></p> <p><span> <wbr> <wbr> <wbr> </span><strong><span>鏂規涓夛細宕╂簝鍦板潃<span> + PDB</span>鏂囦歡<span> + CrashFinder</span></span></strong></p> <p><span> <wbr><wbr> <wbr><wbr> <wbr><wbr> CrashFinder</span><span>鏄竴涓紑婧愬伐鍏鳳紝浣滆呮槸<span>John Robbin</span>錛屽ぇ瀹跺彲浠ュ幓浠栫殑<span>blog</span>涓婂幓鎵懼叧浜?span>CrashFinder</span>鐨勪俊鎭傛垜浠繖閲屼互<span>CrashFinder2.5</span>鐗堟湰涓轟緥浠嬬粛錛岀浉鍏蟲枃绔犻摼鎺ヤ負錛?span><a ><span>http://www.wintellect.com/CS/blogs/jrobbins/archive/2006/04/19/crashfinder-returns.aspx</span></a></span></span></p> <p><span> <wbr><wbr> <wbr><wbr> <wbr> <strong><span>1</span></strong></span><strong><span>銆?span>PDB</span>鏂囦歡</span></strong></p> <p><span> <wbr> <wbr> <wbr> PDB</span><span>錛?span>Program Database</span>錛夋枃浠朵腑鍖呭惈浜?span>exe</span>紼嬪簭鎵鏈夌殑璋冭瘯鐩稿叧淇℃伅錛屽叿浣撳彲浠ユ煡闃?span>MSDN</span>銆傚綋緙栬瘧閫夐」璁劇疆涓?span>/Zi</span>錛岄摼鎺ラ夐」璁劇疆涓?span>/DEBUG</span>錛?span>/OPT:REF</span>鏃訛紝灝變細鐢熸垚宸ョ▼鐨?span>.pdb</span>鏂囦歡銆傚叿浣撳埌<span>VC2005</span>涓紝灝辨槸<span> Project Propertise -> C/C++ -> General -> Debug Information Format </span>欏硅緗負<span> Program Database</span>錛?span>/Zi</span>錛夛紝<span>Linker -> Debugging -> Generate Debug Info </span>欏硅緗負<span> Yes</span>錛?span>/Debug</span>錛夛紝<span>Linker -> Optimization -> References </span><wbr>欏硅緗負<span> Eliminate <wbr>Unreferenced Data</span>錛?span>/OPT:REF</span>錛夈?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鍙璁劇疆浠ヤ笂閫夐」錛?span>release</span>鐗堟湰涔熻兘鐢熸垚<span>PDB</span>鏂囦歡銆傚綋鐒訛紝瀵瑰簲鐨勫簲鐢ㄧ▼搴忎篃浼氱◢澶с?/span></p> <p><span> <wbr> <wbr> <wbr> <strong><span>2</span></strong></span><strong><span>銆?span>CrashFinder</span></span></strong></p> <p><span> <wbr> <wbr> <wbr> CrashFinder</span><span>鑳藉榪愯闇瑕佷袱涓潯浠訛細涓鏄郴緇熷繀欏昏鏈?span>dbghelp.dll</span>鏂囦歡錛涗簩鏄?span>PDB</span>鏂囦歡蹇呴』涓?span>exe</span>鏂囦歡鍦ㄤ竴涓礬寰勪笅銆傚浜?span>dbghelp.dll</span>錛屼竴鑸湪緋葷粺<span>system32</span>璺緞涓嬮兘鏈夛紝濡傛灉娌℃湁涓嬭澆涓涓斁鍒拌繖涓洰褰曚笅灝卞彲浠ヤ簡銆?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鍏堢湅涓涓?span>CrashFinder</span>鐨勭晫闈€?/span></p> <p><span> <wbr> <wbr> </span><wbr></p> <p align=center><span><a target=_blank><span><span><img title=clip_image009 border=0 alt=clip_image009 src="http://m.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/ReleaseCrash_A881/clip_image009_60e666ee-6f31-4132-929c-3ef20c5a9fde.jpg" width=494 height=327 v:shapes="_x0000_i1033"></span></span></a></span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鐢ㄨ搗鏉ヤ篃闈炲父綆鍗曘傞鍏堥夋嫨<span>File->New</span>鎴栫偣鍑誨伐鍏鋒爮鏂板緩鎸夐挳錛岄夋嫨瑕佽皟璇曠殑<span>exe</span>鏂囦歡鎵撳紑錛屼細鍙戠幇<span>exe</span>鍙婃墍渚濊禆鐨?span>dll</span>鏂囦歡淇℃伅閮藉凡緇忓姞杞借繘鏉ャ傚湪涓嬪崐閮ㄥ垎鐨勭紪杈戞涓緭鍏ュ穿婧冨湴鍧錛?span>16</span>榪涘埗錛夛紝鐐瑰彸杈圭殑<span>“Find”</span>鎸夐挳錛屽氨浼氬湪涓嬮潰鏄劇ず宕╂簝鐨勬簮鏂囦歡璺緞銆佸悕縐頒互鍙婂穿婧冩墍鍦ㄨ鍙蜂簡錛屽涓嬪浘鎵紺恒?/span></p> <p align=center><span><a target=_blank><span><span><img title=clip_image010 border=0 alt=clip_image010 src="http://m.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/ReleaseCrash_A881/clip_image010_4b25ce3c-1bea-4818-be58-230d6cba8a6a.jpg" width=494 height=370 v:shapes="_x0000_i1034" real_src="http://s10.sinaimg.cn/bmiddle/48f93b53g7a37da3b3c69&690"></span></span></a></span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鐢?span>CrashFinder</span>榪涜<span>crash</span>瀹氫綅鐪熺殑闈炲父鏂逛究銆備絾鏄垜鍦ㄤ嬌鐢ㄨ繃紼嬩腑鍙戠幇浜嗕竴涓?span>bug</span>錛屾瘡嬈″惎鍔ㄧ▼搴忓悗錛岀洿鎺ユ柊寤虹殑璇濆姞杞借繘鏉ョ殑<span>exe</span>妯″潡閮芥樉紺哄弶錛屾彁紺烘壘涓嶅埌<span>debug symbols</span>銆備絾鏄敤鎵撳紑鎸夐挳闅忎究鎵撳紑涓涓枃浠跺け璐ュ悗錛屽啀鏂板緩灝辮兘鎴愬姛銆傜寽嫻嬪彲鑳芥槸鐩存帴鏂板緩錛屽畾浣?span>PDB</span>鏂囦歡鏃剁殑璺緞涓嶅寮曡搗鐨勩傛湁婧愮爜錛屼絾鏄噿鐨勭湅浜嗗懙鍛碉紝澶у鎰熷叴瓚e彲浠ヨ瘯涓涓嬨?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>濂戒簡錛屾柟妗堜笁灝變粙緇嶅埌榪欓噷錛屽悗闈㈣繕鏈夋洿鍔犲己澶х殑鏂規<span> : )</span></span></p> <p><span>鍓嶉潰鍑犱釜鏂規閮芥槸鐩存帴瀹氫綅<span>crash</span>鐨勪唬鐮佷綅緗紝浣嗘槸鍦ㄦ瘮杈冨ぇ鍨嬬殑紼嬪簭涓紝鍙煡閬撹繖涓俊鎭繕鏄繙榪滀笉澶熺殑錛屾垜浠笇鏈涚煡閬撴洿澶氬叧浜庤皟鐢ㄥ嚱鏁伴『搴忓強鍙橀噺鍊肩瓑淇℃伅錛屼篃灝辨槸<span>crash</span>鏃惰皟鐢ㄥ爢鏍堜俊鎭?/span></p> <p> <wbr></p> <p><span> <wbr> <wbr> <wbr> </span><strong><span>鏂規鍥涳細<span>SetUnhandledExceptionFil<wbr>ter + StackWalker</span></span></strong></p> <p><span> <wbr> <wbr> <wbr> </span><span>榪欎釜鏂規闇瑕佽嚜宸卞姩鎵嬪線宸ョ▼閲屾坊鍔犱唬鐮佷簡銆傝瀹炵幇涓婇潰鐨勬兂娉曪紝闇瑕佸仛涓や歡浜嬫儏錛?span>1</span>銆侀渶瑕佸湪<span>crash</span>鏃舵湁鏈轟細瀵圭▼搴忓爢鏍堣繘琛屽鐞嗭紱<span>2</span>銆佸鍫嗘爤淇℃伅榪涜鏀墮泦銆?/span></p> <p><span> <wbr> <wbr> <wbr> <strong><span>1</span></strong></span><strong><span>銆?span>SetUnhandleExceptionFilt<wbr>er</span>鍑芥暟</span></strong></p> <p><span> <wbr> <wbr> <wbr> Windows</span><span>騫沖彴涓嬬殑<span>C++</span>紼嬪簭寮傚父閫氬父鍙垎涓轟袱縐嶏細緇撴瀯鍖栧紓甯革紙<span>Structured Exception</span>錛屽彲浠ョ悊瑙d負涓庢搷浣滅郴緇熺浉鍏崇殑寮傚父錛夊拰<span>C++</span>寮傚父銆傚浜庣粨鏋勫寲寮傚父澶勭悊錛?span>SEH</span>錛夛紝鍙互鎵懼埌寰堝璧勬枡錛屽湪姝や笉緇嗚銆傚浜?span>crash</span>閿欒錛屼竴鑸敱鏈姝e父鎹曡幏鐨勫紓甯稿紩璧鳳紝<span>Windows</span>鎿嶄綔緋葷粺鎻愪緵浜嗕竴涓?span>API</span>鍑芥暟鍙互鍦ㄧ▼搴?span>crash</span>涔嬪墠鏈夋満浼氬鐞嗚繖浜涘紓甯革紝灝辨槸<span>SetUnhandleExceptionFilt<wbr>er</span>鍑芥暟銆傦紙<span>C++</span>涔熸湁涓涓被浼煎嚱鏁?span>set_terminate</span>鍙互澶勭悊鏈鎹曡幏鐨?span>C++</span>寮傚父銆傦級</span></p> <p><span> <wbr> <wbr> <wbr> SetUnhandleExceptionFilt<wbr>er</span><span>鍑芥暟澹版槑濡備笅錛?/span></p> <p><span> <wbr> <wbr> <wbr> LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFil<wbr>ter(<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> LPTOP_LEVEL_EXCEPTION_FILTER <em>lpTopLevelExceptionFilte<wbr>r</em><br> <wbr> <wbr> <wbr> );</span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鍏朵腑<span> LPTOP_LEVEL_EXCEPTION_FILTER </span>瀹氫箟濡備笅錛?/span></p> <p><span> <wbr> <wbr> <wbr> typedef LONG (WINAPI *PTOP_LEVEL_EXCEPTION_FILTER)(<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> __in struct _EXCEPTION_POINTERS *ExceptionInfo<br> <wbr> <wbr> <wbr> );<br> <wbr> <wbr> <wbr> typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;</span></p> <p><span> <wbr> <wbr> <wbr> </span><span>綆鍗曟潵璇達紝<span>SetUnhandleExceptionFilt<wbr>er</span>鍏佽鎴戜滑璁劇疆涓涓嚜宸辯殑鍑芥暟浣滀負鍏ㄥ眬<span>SEH</span>榪囨護鍑芥暟錛屽綋紼嬪簭<span>crash</span>鍓嶄細璋冪敤鎴戜滑鐨勫嚱鏁拌繘琛屽鐞嗐傛垜浠彲浠ュ埄鐢ㄧ殑鏄?span> _EXCEPTION_POINTERS </span>緇撴瀯綾誨瀷鐨勫彉閲?span>ExceptionInfo</span>錛屽畠鍖呭惈浜嗗寮傚父鐨勬弿榪頒互鍙婂彂鐢熷紓甯哥殑綰跨▼鐘舵侊紝榪囨護鍑芥暟鍙互閫氳繃榪斿洖涓嶅悓鐨勫兼潵璁╃郴緇熺戶緇繍琛屾垨閫鍑哄簲鐢ㄧ▼搴忋?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鍏充簬<span> SetUnhandleExceptionFilt<wbr>er </span>鍑芥暟鐨勫叿浣撶敤娉曞拰紺轟緥璇峰弬鑰?span>MSDN</span>銆?/span></p> <p> <wbr></p> <p><span> <wbr> <wbr> <wbr> <strong><span>2</span></strong></span><strong><span>銆?span>StackWalker</span></span></strong><span><br> <wbr> <wbr> <wbr> </span><span>鐜板湪鎴戜滑宸茬粡鏈夋満浼氬彲浠ュ湪<span>crash</span>涔嬪墠瀵圭▼搴忕姸鎬佷俊鎭繘琛屽鐞嗕簡錛屽彧闇瑕佺敓鎴愬茍淇濆瓨鍫嗘爤淇℃伅灝卞ぇ鍔熷憡鎴愪簡銆?span>Windows</span>鐨?span>dbghelp.dll</span>搴撴彁渚涗簡涓涓嚱鏁板彲浠ュ緱鍒板綋鍓嶅爢鏍堜俊鎭細<span>StackWalk64</span>錛堝湪<span>Win2K</span>浠ュ墠鐗堟湰涓負<span>StackWalk</span>錛夈傝鍑芥暟澹版槑濡備笅錛?/span></p> <p><span> <wbr> <wbr> <wbr> BOOL WINAPI StackWalk64(<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> DWORD <em>MachineType</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> HANDLE <em>hProcess</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> HANDLE <em>hThread</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in_out <wbr> <wbr> <wbr> <wbr> <wbr> LPSTACKFRAME64 <em>StackFrame</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in_out <wbr> <wbr> <wbr> <wbr> <wbr> PVOID <em>ContextRecord</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> PREAD_PROCESS_MEMORY_ROUTINE64 <em>ReadMemoryRoutine</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> PFUNCTION_TABLE_ACCESS_ROUTINE64 <em>FunctionTableAccessRouti<wbr>ne</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> PGET_MODULE_BASE_ROUTINE64 <em>GetModuleBaseRoutine</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> PTRANSLATE_ADDRESS_ROUTINE64 <em>TranslateAddress</em><br> <wbr> <wbr> <wbr> );<br> <wbr> <wbr> <wbr> </span><span>璇ュ嚱鏁扮殑鍏蜂綋鐢ㄦ硶鍙互鍙傝?span>MSDN</span>銆傚湪榪欓噷鎺ㄨ崘涓涓墰浜哄啓濂界殑<span>StackWalker</span>錛屽彲浠ョ洿鎺ユ嬁鏉ョ敤錛屽紑婧愮殑銆?span>StackWalker</span>鎻愪緵浜嗕竴涓熀綾伙紝緇欏嚭浜嗗嚑涓畝鍗曠殑鎺ュ彛錛屽彲浠ユ柟渚垮湴鐢熸垚鍫嗘爤淇℃伅錛屽茍涓旀敮鎸佷竴緋誨垪<span>VC</span>鐗堟湰錛岄潪甯稿ソ鐢ㄣ傛垜浠彲浠ヨ嚜宸卞啓涓涓瓙綾伙紝騫墮噸杞借櫄鍑芥暟<span>OnOutput</span>錛屽氨鍙互灝嗗爢鏍堜俊鎭緭鍑轟負鐗瑰畾鏍煎紡浜嗐?span>StackWalker</span>鐨勫湴鍧涓猴細<span><a ><span>http://www.codeproject.com/KB/threads/StackWalker.aspx</span></a></span>銆?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>涓嶈繃瀵逛簬<span>Release</span>鐗堟湰鏉ヨ錛?span>StackWalk64</span>鍑芥暟鑾峰緱鐨勫爢鏍堜俊鎭湁鍙兘涓嶅畬鏁淬傚鏋滃紓甯告槸鐢?span>MFC</span>鐨勬ā鍧楁姏鍑猴紝閭d箞鑾峰緱鐨勫爢鏍堝彲鑳界己灝戝墠闈㈣皟鐢ㄦā鍧椾俊鎭傚彟澶栵紝<span>StackWalk64</span>闇瑕佹渶鏂扮殑<span>dbghelp.dll</span>鏂囦歡鏀寔鎵嶈兘宸ヤ綔錛涜姝g‘杈撳嚭<span>crash</span>鐨勫嚱鏁板悕鍜岃鍙鳳紝闇瑕佽<span>pdb</span>鏂囦歡鏀寔銆備互涓婁笉瓚蟲湁鍙兘褰卞搷杈撳嚭淇℃伅鐨勫畬鏁存у拰鏁堟灉錛岃屽浜庡彂甯冨湪澶栫殑紼嬪簭錛岃甯︿笂<span>pdb</span>鏂囦歡鍑犱箮涓嶅彲鑳斤紝鍥犳榪欎釜鏂規榪樻槸鏈夌己鎲劇殑錛屾瘮杈冮傜敤浜庢湰鍦扮殑<span>release</span>鐗堟湰璋冭瘯銆?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>涓嬩竴綃囨垜浠皢浠嬬粛涓涓洿鍔犲畬鍠勭殑瑙e喅鏂規</span></p> <p><span>褰撴垜浠妸鑷繁鐨?span>release</span>鐗堟湰紼嬪簭鍙戝竷鍑哄幓浠ュ悗錛屼竴鑸兘鏄湪鐢ㄦ埛鐨勬満鍣ㄤ笂榪愯銆傝繖縐嶆儏鍐典笅錛屽浜庣鍥涚鏂規錛屽洜涓洪渶瑕?span>pdb</span>鏂囦歡鎵嶈兘澶熸紜敓鎴愬爢鏍堣皟鐢ㄧ殑鍑芥暟琛屽彿鍙婁唬鐮佽鍙鳳紝鍥犳鏂規鍥涘彧閫傜敤浜庢湰鍦?span>release</span>鐗堢殑璋冭瘯錛屽惁鍒欏彧鑳界敓鎴愪笉瀹屾暣鐨勫爢鏍堜俊鎭傚浜庡墠涓夌鏂規錛屽叾瀹炲彧闇瑕佺敤鎴峰憡鐭ュ穿婧冨湴鍧錛岀劧鍚庡湪鏈湴鏌ユ壘<span>crash</span>鍦板潃灝卞彲浠ヤ簡錛屼絾鏄畾浣?span>crash</span>鐨勮繃紼嬮潪甯鎬笉鏂逛究錛屽鏋?span>crash</span>鐨勬儏鍐墊瘮杈冨錛屽墠涓夌鏂規閮戒笉鍚堥傘傝屼笖錛屽墠涓夌鏂規鍧囦笉鑳界敓鎴愬爢鏍堣皟鐢ㄤ俊鎭紝瀵逛簬<span>debug</span>鐨勪綔鐢ㄦ湁闄愩?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>涓嬮潰鎴戜滑灝辨潵鐪嬩竴涓洿鍔犲畬鍠勭殑瑙e喅鏂規銆?/span></p> <p> <wbr></p> <p><span> <wbr> <wbr> <wbr> </span><strong><span>鏂規浜旓細<span>SetUnhandledExceptionFil<wbr><wbr>ter + Minidump</span></span></strong></p> <p><span> <wbr> <wbr> <wbr> SetUnhandleExceptionFilt<wbr>er</span><span>鍑芥暟鎴戜滑宸茬粡浠嬬粛榪囦簡錛屾湰鏂規鐨勬濊礬榪樻槸瑕佸埄鐢ㄦ垜浠嚜宸辯殑寮傚父澶勭悊鍑芥暟錛屾潵鐢熸垚<span>minidump</span>鏂囦歡銆?/span></p> <p><span> <wbr> <wbr> <wbr> <strong><span>1</span></strong></span><strong><span>銆?span>Minidump</span>姒傚康</span></strong></p> <p><span> <wbr> <wbr> <wbr> minidump</span><span>錛堝皬瀛樺偍鍣ㄨ漿鍌級鍙互鐞嗚В涓轟竴涓?span>dump</span>鏂囦歡錛岄噷闈㈣褰曚簡鑳藉甯姪璋冭瘯<span>crash</span>鐨勬渶灝忔湁鐢ㄤ俊鎭傚疄闄呬笂錛屽鏋滀綘鍦?緋葷粺灞炴?span> -> </span>楂樼駭<span> -> </span>鍚姩鍜屾晠闅滄仮澶?span> -> </span>璁劇疆<span> -> </span>鍐欏叆璋冭瘯淇℃伅 涓夋嫨<span>“</span>灝忓唴瀛樿漿鍌?span>(64 KB)”</span>鐨勮瘽錛屽綋緋葷粺鎰忓鍋滄鏃墮兘浼氬湪<span>C:\Windows\Minidump\</span>璺緞涓嬬敓鎴愪竴涓?span>.dmp</span>鍚庣紑鐨勬枃浠訛紝榪欎釜鏂囦歡灝辨槸<span>minidump</span>鏂囦歡錛屽彧涓嶈繃榪欎釜鏄唴鏍告佺殑<span>minidump</span>銆?/span></p> <p><span> <wbr> <wbr> </span><wbr><span>鎴戜滑瑕佺敓鎴愮殑鏄敤鎴鋒佺殑<span>minidump</span>錛屾枃浠朵腑鍖呭惈浜嗙▼搴忚繍琛岀殑妯″潡淇℃伅銆佺嚎紼嬩俊鎭佸爢鏍堣皟鐢ㄤ俊鎭瓑銆傝屼笖涓轟簡絎﹀悎鍏?span>mini</span>鐨勭壒鎬э紝<span>dump</span>鏂囦歡鏄帇緙╄繃鐨勩?/span></p> <p><span> <wbr> <wbr> <wbr> <strong><span>2</span></strong></span><strong><span>銆佺敓鎴?span>minidump</span>鏂囦歡</span></strong></p> <p><span> <wbr> <wbr> <wbr> </span><span>鐢熸垚<span>minidump</span>鏂囦歡鐨?span>API</span>鍑芥暟鏄?span>MiniDumpWriteDump</span>錛岃鍑芥暟闇瑕?span>dbghelp.lib</span>鏀寔錛屽叾鍘熷瀷濡備笅<span>:</span></span></p> <p><span> <wbr> <wbr> <wbr> BOOL WINAPI MiniDumpWriteDump(<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> HANDLE <em>hProcess</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> DWORD <em>ProcessId</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> HANDLE <em>hFile</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> MINIDUMP_TYPE <em>DumpType</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> PMINIDUMP_EXCEPTION_INFORMATION <em>ExceptionParam</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> PMINIDUMP_USER_STREAM_INFORMATION <em>UserStreamParam</em>,<br> <wbr> <wbr> <wbr> <wbr> <wbr> __in <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> PMINIDUMP_CALLBACK_INFORMATION <em>CallbackParam</em><br> <wbr> <wbr> <wbr> );</span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鍦ㄦ垜浠殑寮傚父澶勭悊鍑芥暟涓姞鍏ヤ互涓嬩唬鐮侊細</span></p> <p><span> <wbr> <wbr> <wbr> HANDLE hFile = ::CreateFile( _T("E:\\dumpfile.dmp"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);<br> <wbr> <wbr> <wbr> <wbr> if( hFile != INVALID_HANDLE_VALUE)<br> <wbr> <wbr> <wbr> <wbr> {<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> MINIDUMP_EXCEPTION_INFORMATION einfo;<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> einfo.ThreadId = ::GetCurrentThreadId();<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> einfo.ExceptionPointers = pExInfo;<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> einfo.ClientPointers = FALSE;</span></p> <p><span> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> ::MiniDumpWriteDump(::GetCurrentProcess(), ::GetCurrentProcessId(), hFile, MiniDumpNormal, &einfo, NULL, NULL);<br> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> ::CloseHandle(hFile);<br> <wbr> <wbr> <wbr> <wbr> }</span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鍏朵腑錛?span>pExInfo</span>鍙橀噺涓哄紓甯稿鐞嗗嚱鏁?span>PEXCEPTION_POINTERS</span>綾誨瀷鐨勫弬鏁般傚叿浣撹鍙傝?span>MSDN</span>銆?/span></p> <p><span> <wbr> <wbr> <wbr> <strong><span>3</span></strong></span><strong><span>銆佽皟璇?span>minidump</span></span></strong></p> <p><span> <wbr> <wbr> <wbr> </span><wbr><span>璋冭瘯<span>dump</span>鏂囦歡棣栧厛闇瑕?span>pdb</span>鏂囦歡錛屽洜姝ゆ垜浠?span>build</span>紼嬪簭鏃墮渶瑕佽緗?span> Debug Infomation Format </span>涓?span> “Program Database</span>錛?span>/Zi</span>錛?span>”</span>銆傚叾嬈★紝鎴戜滑榪樿紜繚鎵鐢ㄧ殑<span>dump</span>鏂囦歡涓庢簮浠g爜銆?span>exe</span>銆?span>pdb</span>鏂囦歡鐗堟湰鏄竴鑷寸殑錛岃繖瑕佹眰鎴戜滑蹇呴』緇存姢濂界▼搴忕増鏈俊鎭?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>璋冭瘯<span>minidump</span>鏈鏂逛究鐨勭幆澧冨氨鏄?span>VS</span>浜嗭紝鎴戜滑鍙灝?span>.dmp</span>銆?span>.exe</span>銆?span>.pdb</span>鏂囦歡鏀懼湪涓涓礬寰勪笅錛屼繚璇佹簮浠g爜鏂囦歡鐨勮礬寰勪笌緙栬瘧鏃剁殑璺緞涓鑷村氨鍙互浜嗭紝鍓╀笅鐨勫氨鏄?span>VS</span>甯垜浠畬鎴愩傚弻鍑?span>.dmp</span>鏂囦歡鎴栬呭湪鏂囦歡鎵撳紑宸ョ▼涓夋嫨<span>“dump files”</span>錛屽姞杞?span>dump</span>鏂囦歡錛岀劧鍚庢寜<span>F5</span>榪愯灝辮兘鐩存帴鎭㈠<span>crash</span>鏃剁殑鐜板満浜嗭紝浣犲彲浠ュ畾浣?span>crash</span>鐨勪唬鐮侊紝鍙互鏌ョ湅璋冪敤鍫嗘爤錛屽彲浠ユ煡鐪嬬嚎紼嬪拰妯″潡淇℃伅<span>...</span>涓鍒囬兘璺熶綘璁劇疆鏂偣璋冭瘯涓鏍鳳紝澶己澶т簡錛佺湅涓埅鍥懼惂銆?/span></p> <p><span><a target=_blank><span><span><img title=clip_image012 border=0 alt=clip_image012 src="http://m.shnenglu.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/ReleaseCrash_A881/clip_image012_3df8e4ef-d0e8-49d3-a9af-47f58cc713c6.jpg" width=616 height=469 v:shapes="_x0000_i1035"></span></span></a><a target=_blank></a></span></p> <p><span> <wbr> <wbr> <wbr> </span><span>闇瑕佹敞鎰忕殑鏄紝瀵逛簬<span>release</span>鐗堢殑紼嬪簭鏉ヨ錛屽緢澶氫唬鐮佹槸緇忚繃緙栬瘧鍣ㄤ紭鍖栬繃鐨勶紝鍥犳瀹氫綅鐨勬椂鍊欏彲鑳戒細鏈夋墍鍋忓樊錛屽ぇ瀹跺彲浠ヨ冭檻璁劇疆閫夐」鍘繪帀浠g爜浼樺寲銆?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鍏朵粬鍙互璋冭瘯<span>minidump</span>鐨勫伐鍏瘋繕鏈?span>WinDbg</span>絳夛紝澶у鍙互鏌ラ槄鐩稿叧璧勬枡銆?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鏈枃涓昏鍙傝冧簡榪欑瘒鏂囩珷錛?span><a ><span>http://vicchina.51.net/research/other/seh/minidumps/intro.htm</span></a></span>銆?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>涓嬩竴綃囷紝鎴戜滑灝嗙粰鍑轟竴涓皟璇?span>release</span>鍙戝竷紼嬪簭鐨勫畬緹庤В鍐蟲柟妗堬紝閫傚悎鐢ㄦ埛閲忚緝澶х殑搴旂敤鍙戝竷紼嬪簭鐨勮皟璇曘?/span></p> <p><span>涓婁竴綃囨垜浠凡緇忕粰鍑轟簡鏂規錛岃兘澶熼潪甯告柟渚跨殑閫氳繃<span>dump</span>鏂囦歡瀵?span>crash</span>閿欒榪涜璋冭瘯鍜屽畾浣嶏紱浠庢暣涓祦紼嬩笂鐪嬭繕宸渶鍚庝竴姝ワ紝鍗蟲庢牱鎷垮埌<span>crash</span>鏃朵駭鐢熺殑<span>dump</span>鏂囦歡銆傚鏋滃彲浠ヨ鐢ㄦ埛鎶婃枃浠跺彂閫佽繃鏉ヨ嚜鐒朵笉閿欙紝浣嗗浜庣被浼煎厤璐瑰叡浜蔣浠剁瓑鍦ㄤ簰鑱旂綉涓婂彂甯冪殑紼嬪簭鍛紵鎴戜滑鐨勭敤鎴鋒槸涓嶇‘瀹氱殑錛岃屼笖鐢ㄦ埛閲忔湁鍙兘闈炲父澶э紝鍗充嬌鎴戜滑鑳芥兂鍔炴硶鑱旂郴鍒扮敤鎴鳳紝鎬諱笉鑳芥尐涓幓鏀墮泦<span>crash</span>淇℃伅鍚с?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鎴戜滑闇瑕佷竴縐嶆柟妗堬紝鑳藉鎻愪緵<span>crash</span>淇℃伅姹囨姤鍔熻兘銆?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鎴戜滑鍙互鏋惰涓鍙版湇鍔″櫒涓撻棬榪涜淇℃伅鏀墮泦錛屽彧瑕佸鎴風鍦?span>crash</span>鏃舵紜眹鎶ュ嵆鍙紝浣嗘槸鐩稿簲鐨勭淮鎶ゆ垚鏈拰寮鍙戦毦搴︿篃涓嶅彲蹇借銆傛湁娌℃湁鏇寸畝鍗曠殑鏂規硶鍛紵榪樿寰楁垜鐨勫崥鏂?span>“<a target=_blank><span><span>涓虹▼搴忔坊鍔犺嚜鍔ㄥ彂閫丒mail</span></span><span><span>鍔熻兘</span></span></a>”</span>鍚楋紵榪欏氨鏄畝鍗曟湁鏁堢殑鏂規硶錛?/span></p> <p> <wbr></p> <p><span> <wbr> <wbr> <wbr> </span><strong><span>鏂規鍏細<span>minidump + email</span></span></strong></p> <p><span> <wbr> <wbr> <wbr> </span><span>鎴戜滑鍙渶瑕佸湪寮傚父澶勭悊鏃訛紝鍏堢敓鎴?span>minidump</span>淇℃伅鏂囦歡錛屽啀鐢?span>email</span>鏂瑰紡灝嗘枃浠跺彂閫佸埌鎸囧畾閭灝辮浜嗐傚墿涓嬬殑灝辨槸鎴戜滑姣忓ぉ鏌ョ湅閭錛屾彁鍙?span>dump</span>鏂囦歡榪涜璋冭瘯浜嗐?/span></p> <p><span> <wbr> <wbr> <wbr> <strong><span>1</span></strong></span><strong><span>銆?span>Email</span>鍔熻兘</span></strong></p> <p><span> <wbr> <wbr> <wbr> </span><span>棣栧厛鎴戜滑鏉ョ湅涓涓?span>email</span>鍙戦侀兘闇瑕佸摢浜涚浉鍏充俊鎭?/span></p> <p><span> <wbr> <wbr> <wbr> a</span><span>銆佸彂閫佺閭甯愭埛錛?/span></p> <p><span> <wbr> <wbr> <wbr> b</span><span>銆佹帴鏀剁閭甯愭埛錛?/span></p> <p><span> <wbr> <wbr> <wbr> c</span><span>銆?span>email</span>鏍囬錛屼竴鑸簲鏈夎蔣浠跺悕縐板強鐗堟湰淇℃伅錛?/span></p> <p><span> <wbr> <wbr> <wbr> d</span><span>銆?span>email</span>姝f枃錛屼竴鑸簲鏈夌畝鍗曠殑<span>crash</span>淇℃伅鎻愮ず錛屼互鍖哄埆涓嶅悓鍘熷洜閫犳垚鐨?span>crash</span>錛?/span></p> <p><span> <wbr> <wbr> <wbr> <wbr>e</span><span>銆?span>email</span>闄勪歡錛屽綋鐒跺氨鏄垜浠殑<span>dump</span>鏂囦歡浜嗭紝榪樺彲浠ュ姞涓婅蔣浠剁敓鎴愮殑<span>log</span>鏂囦歡絳夈?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>褰撶劧錛屽浜庢爣棰樺簲璇ュ敖閲忓鍔犱竴浜涗俊鎭尯鍒紩璧?span>crash</span>鐨勫師鍥狅紝姣斿灝?span>crash</span>鐨勫湴鍧淇℃伅鍔犲埌鏍囬涓紱鍥犱負褰撴瘡澶╂湁鎴愮櫨涓婂崈鐨?span>crash</span>姹囨姤涓婃潵錛岄噸澶嶇殑<span>crash</span>鍗犲ぇ澶氭暟錛屾妸鏃墮棿閮借姳鍦ㄥ尯鍒嗗畠浠韓涓婃湁鐐瑰お嫻垂銆傜敱姝ょ湅鏉ワ紝鍓嶉潰鏂規涓彁鍒扮殑<span>StackWalker</span>榪樻槸鏈変簺鐢ㄥ鐨勶紝鎴戜滑鍙互鐢ㄥ畠鏉ョ敓鎴愪竴浜?span>crash</span>鐨勬枃瀛楁弿榪頒俊鎭紝鍐欏埌鏍囬鎴栨鏂囦腑鍘匯?/span></p> <p><span> <wbr> <wbr> <wbr> dump</span><span>鏂囦歡鐨勫ぇ灝忔槸鍚﹂傚悎浣滀負閭歡鐨勯檮浠跺憿錛熷疄闄呬笂<span>minidump</span>浜х敓鐨勬枃浠朵竴鑸湪鍑?span>K</span>鍒板嚑鍗?span>K</span>涔嬮棿錛屼綔涓?span>email</span>鐨勯檮浠舵病鏈変換浣曢棶棰樸?/span></p> <p><span> <wbr> <wbr> <wbr> </span><span>鍏充簬鍙戦?span>email</span>鐩稿叧鎶鏈粏鑺傦紝宸茬粡鍦?span>“<a target=_blank><span><span>涓虹▼搴忔坊鍔犺嚜鍔ㄥ彂閫丒mail</span></span><span><span>鍔熻兘</span></span></a>”</span>鏂囦腑浠嬬粛浜嗭紝澶у鍙互鍙傝冦傚叾瀹烇紝瀵規帴鍙楅偖綆變腑閭歡鐨勫鐞嗚繕鏄緢璐規椂璐瑰姏鐨勶紝澶у鍙互鑰冭檻鍐欎竴浜涜剼鏈皢澶勭悊嫻佺▼鑷姩鍖栵紝鎻愰珮鏁堢巼銆?/span></p> <p><span> <wbr> <wbr> <wbr> <strong><span>2</span></strong></span><strong><span>銆?span>google breakpad</span></span></strong></p> <p><span> <wbr> <wbr> <wbr> google breakpad</span><span>鏄竴涓紑婧愮殑璺ㄥ鉤鍙?span>crash report</span>緋葷粺錛屽厜浠庡紑婧愬拰璺ㄥ鉤鍙拌繖涓や釜鐗圭偣涓婃潵鐪嬶紝瀹冨氨瓚充互縐扮殑涓婃槸涓涓畬鍠勮屾湁鏁堢殑宸ュ叿浜嗐傚叾瀹烇紝<span>breakpad</span>鍦ㄦ暣涓?span>crash report</span>灞傛涓婄粰鍑轟簡涓涓郴緇熺駭鐨勮В鍐蟲柟妗堬紝涔熷氨鏄瀹冨嚑涔庤兘閫傚簲鍚勭杞歡銆佸悇縐嶅鉤鍙扮殑搴旂敤瑕佹眰銆?/span></p> <p><span> <wbr> <wbr> <wbr> breakpad</span><span>鐨勬暣浣撴濊礬璺熶笂闈粙緇嶇殑鏂規鏄浉浼肩殑錛屽彧涓嶈繃鏈鍚庢彁浜?span>dump</span>鏂囦歡鐨勬柟寮忔洿鍔犲畬鍠勩傚ぇ瀹舵湁鍏磋叮鍙互鍘誨畠鐨勫畼鏂圭綉鍧鏌ラ槄鐩稿叧璧勬枡錛?span><a ><span>http://code.google.com/p/google-breakpad/</span></a></span>銆?/span></p> <p> <wbr></p> <p><span> <wbr> <wbr> <wbr> ok</span><span>錛屽叧浜庤皟璇?span>release</span>鍙戝竷紼嬪簭鐨?span>crash</span>閿欒緋誨垪鏂囩珷灝卞啓瀹屼簡銆傝繖鍑犵瘒鏂囩珷緇欏嚭鐨勬柟妗堢敱綆鍗曞埌澶嶆潅錛岀敱綆闄嬪埌瀹屽杽錛屽<span>crash</span>璋冭瘯鏈変簡涓涓瘮杈冨叏闈㈢殑鎬葷粨銆傚綋鐒訛紝鍏朵腑娑夊強鍒扮殑姒傚康鍜屾妧鏈繕寰堝錛岄渶瑕佹垜浠幓涓嶆柇瀛︿範鍜岄鎮燂紝涔熷笇鏈涘ぇ瀹惰兘澶熶簰鐩鎬氦嫻併?/span></p> </div> <img src ="http://m.shnenglu.com/Walker/aggbug/146153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Walker/" target="_blank">婕鑰吤?鈥︹?錕?/a> 2011-05-11 07:53 <a href="http://m.shnenglu.com/Walker/articles/146153.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>dll pe 鏂囦歡澶?/title><link>http://m.shnenglu.com/Walker/articles/144121.html</link><dc:creator>婕鑰吤?amp;鈥︹?錕?/dc:creator><author>婕鑰吤?amp;鈥︹?錕?/author><pubDate>Wed, 13 Apr 2011 06:41:00 GMT</pubDate><guid>http://m.shnenglu.com/Walker/articles/144121.html</guid><wfw:comment>http://m.shnenglu.com/Walker/comments/144121.html</wfw:comment><comments>http://m.shnenglu.com/Walker/articles/144121.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Walker/comments/commentRss/144121.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Walker/services/trackbacks/144121.html</trackback:ping><description><![CDATA[闂細1.1<br>鎴戠煡閬撶▼搴忎腑鏈閲嶈鐨勬鏄痶ext孌碉紝璇峰憡璇夋垜text 孌靛湪鍝紵<br>絳旓細1.1<br>text 孌靛湪鏂囦歡鍋忕Щ0x400澶勶紝澶у皬0x200瀛楄妭錛岃鍖哄彲榪愯錛屽彲璇誨彇錛屽寘鍚唬鐮併?br>璇ュ尯鍦ㄥ唴瀛樹腑RVA 0x1000澶勶紝澶у皬0x1000.<br><br>闂細1.2<br>鎴戠敤urtraedit 鎵撳紑hello.exe 鐪嬩簡錛屽湪0x400澶?0x600澶勶紝澶ч儴鍒嗛兘鏄?錛屼負浠涔堣繖鏍峰憿銆?br>絳旓細1.2<br><span id="hvzpftn" class=highlight><strong><font color=#ff0000>pe</font></strong></span> 鏍煎紡澶ч儴鍒嗘枃浠墮兘鏄繖鏍鳳紝榪欐槸瀵歸綈鎵瑕佹眰鐨勶紝鏂囦歡瀵歸綈涓?x200, 鍐呭瓨瀵歸綈涓?x1000<br>浣犲彲浠ュ湪NT_Option_Header 鐨凷ection_Alignment, File_Alignment 鍩熶腑鐪嬪埌榪欎袱涓暟鎹?br><br>//<br>// Optional header format.<br>//<br><br>ty<span id="hvzpftn" class=highlight><strong><font color=#ff0000>pe</font></strong></span>def struct _IMAGE_OPTIONAL_HEADER {<br>//<br>// Standard fields.<br>//<br><br>WORD Magic;<br>BYTE MajorLinkerVersion;<br>BYTE MinorLinkerVersion;<br>DWORD SizeOfCode;<br>DWORD SizeOfInitializedData;<br>DWORD SizeOfUninitializedData;<br>DWORD AddressOfEntryPoint;<br>DWORD BaseOfCode;<br>DWORD BaseOfData;<br><br>//<br>// NT additional fields.<br>//<br><br>DWORD ImageBase;<br>DWORD SectionAlignment;<br>DWORD FileAlignment;<br>WORD MajorO<span id="hvzpftn" class=highlight><strong><font color=#ff0000>pe</font></strong></span>ratingSystemVersion;<br>WORD MinorO<span id="hvzpftn" class=highlight><strong><font color=#ff0000>pe</font></strong></span>ratingSystemVersion;<br>WORD MajorImageVersion;<br>WORD MinorImageVersion;<br>WORD MajorSubsystemVersion;<br>WORD MinorSubsystemVersion;<br>DWORD Win32VersionValue;<br>DWORD SizeOfImage;<br>DWORD SizeOfHeaders;<br>DWORD CheckSum;<br>WORD Subsystem;<br>WORD DllCharacteristics;<br>DWORD SizeOfStackReserve;<br>DWORD SizeOfStackCommit;<br>DWORD SizeOfHeapReserve;<br>DWORD SizeOfHeapCommit;<br>DWORD LoaderFlags;z<br>DWORD NumberOfRvaAndSizes;<br>IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];<br>} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;<br><br>闂細1.3<br>鎱㈢偣錛屽埆涓涓嬪瓙璐撮偅涔堝涓滆タ錛屾垜榪樻病鏈夋壘鍒?_IMAGE_OPTIONAL_HEADER 鐨勪綅緗憿錛?br>鍛婅瘔鎴戞庢牱鎵?br>絳旓細1.3<br>璐翠笂閭d釜_IMAGE_OPTIONAL_HEADER緇撴瀯濂借璇濓紝瀹冪殑浣嶇疆绱ц窡鍦?MAGE_FILE_HEADER 涔嬪悗<br>鍛婅瘔浣犱釜灝忔妧宸э紝閭d釜Magic瀵筃T x86鏉ヨ鎬繪槸010B,鍦ㄥご鏂囦歡鎵懼埌閭d釜010b,灝辨槸IMAGE_OPTIONAL_HEADER32 緇撴瀯鐨勫湴鍧銆?br><br>闂細1.4<br>闂瓚婃潵瓚婂浜嗐?br>_IMAGE_OPTIONAL_HEADER 榪樻病鏈夎娓呭憿錛屽張鍑烘潵涓涓狪MAGE_FILE_HEADER銆傚厛涓嶇IMAGE_FILE_HEADER<br>鍏堟寜浣犵殑灝忔妧宸э紝鍦ㄥご閮ㄦ壘鍒?10b, 鍥犱負鏄痩ittle endial, 鍦╱ltraedit 涓鎵?b 01.<br>濂斤紝鎵懼埌浜嗭紝紱婚偅涓?50 45 00 00 (ascii PE)鐩歌窛涓嶈繙錛屽湪鍋忕ЩD8澶勶紝鎸変綘鎵璇碨ectionAlignment鍜孎ileAlignment 搴旇鍦ㄧ粨鏋勭9涓紝絎?0涓狣WORD 澶勩?br>濂斤紝鎵懼埌浜嗭紝鍦╢8澶勬湁00001000錛?FC澶勪負00 00 02 00 錛堟垜宸茬粡鑰冭檻浜唀ndian,浠ュ悗涓嶇敤鎻愰啋浜嗭級銆?br>絳旓細1.4<br>鍛錛岃繘姝ヤ笉灝忓悧錛熻繖鏍蜂竴涓嬪瓙浣犲氨鎶奍MAGE_OPTIONAL_HEADER32 涓墍鏈夌殑涓滆タ閮芥壘鍑烘潵浜嗐?br><br>闂細1.5<br>鏄殑錛屾垜鍙互鎶奜ptional header涓墍鏈変笢瑗塊兘鎵懼嚭鏉ワ紝浣嗘垜鐜板湪闄や簡鍒氭墠浠嬬粛鐨勭9涓狣WORD涓哄唴瀛樺榻愬ぇ灝忥紝絎?0涓狣WORD涓烘枃浠跺榻愬ぇ灝忥紝鍏跺畠鎴戦兘涓嶇煡閬撴槸騫蹭粈涔堢殑錛?br>絳旓細1.5<br>鍒潃鎬ワ紝鍏跺疄榪樻槸寰堝鏄撶悊瑙g殑錛屼粠瀛楅潰鎰忎箟灝辮兘鐚滃ぇ姒傘備笉榪囨垜浠幇鍦ㄨ繕涓嶆槸閫氳Optional header鐨勬椂鍊欙紝榪樻槸鎷f垜浠渶鍏沖績鐨勯棶棰樻彃鎵嬪惂銆?br><br>闂細1.6 <br>榪樻槸鍥炲埌text 孌典笂鏉ュ惂錛屽垰鎵嶄綘瀵箃ext孌靛ぇ灝忥紝浣嶇疆錛屽睘鎬у垎鏋愮殑澶村ご鏄埌<br>浣犳槸浠庨偅鐪嬪嚭鏉ョ殑錛?br>絳旓細1.6<br>鏄粠section header 涓湅鍑烘潵鐨勶紝姣忎竴涓猻ection, 閮芥湁涓涓猻ection header 鎻忚堪鍏朵綅緗紝澶у皬錛屽睘鎬с?br>section header 鐨勭粨鏋勬槸榪欐牱瀹氫箟鐨?br>#define IMAGE_SIZEOF_SHORT_NAME 8<br><br>ty<span id="hvzpftn" class=highlight><strong><font color=#ff0000>pe</font></strong></span>def struct _IMAGE_SECTION_HEADER {<br>BYTE Name[IMAGE_SIZEOF_SHORT_NAME];<br>union {<br>DWORD PhysicalAddress;<br>DWORD VirtualSize;<br>} Misc;<br>DWORD VirtualAddress;<br>DWORD SizeOfRawData;<br>DWORD PointerToRawData;<br>DWORD PointerToRelocations;<br>DWORD PointerToLinenumbers;<br>WORD NumberOfRelocations;<br>WORD NumberOfLinenumbers;<br>DWORD Characteristics;<br>} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;<br><br>闂細1.7<br>鍛︼紝鎱㈢偣錛屾庝箞鍙堝線澶栫敥緇撴瀯錛屾垜寰堣彍錛?鍝︼紝涓嶅お澶氾紝榪樿鍚с?br>涓嶈繃浣犺繕鏄憡璇夋垜鍏蜂綋浣嶇疆鍦ㄥ摢鍚э紝鎴戝ソ鎷跨粨鏋勫拰鏁版嵁瀵瑰鍙楓?br>絳旓細1.7<br>濂斤紝姝f槸榪欑<span id="hvzpftn" class=highlight><strong><font color=#ff0000>瀛︿範</font></strong></span>鏂規硶銆備綘涓瀹氳兘瀛︿細鐨勩?br>鑺傝〃澶存槸涓涓暟緇勶紝瀹冩妸鎵鏈夎妭鐨勪綅緗紝闀垮害錛屽睘鎬ф斁鍦ㄤ簡涓璧?br>绱ц窡鍦╫ption header 涔嬪悗錛屾墍浠ヤ綘浠庢枃浠跺ご閮ㄥ線涓嬫壘灝卞彲浠ヤ簡銆?br>鐪嬪埌IMAGE_SECTION_HEADER緇撴瀯鐨勭涓涓垚鍛樹簡鍚楋紝瀹冩槸<br>BYTE Name銆?銆?br>榪欐槸鑺傚悕縐幫紝浣犺鎵劇殑text 孌靛悕瀛楀氨鏄?.text, 浣犵湅ultraedit<br>ascii 鐮佸尯紱繪枃浠跺紑濮嬩笉榪滅殑鍦版柟錛屾湁涓涓?text, 瀵瑰簲鐨勪簩榪涘埗<br>鏁版嵁鏄?E 74 65 78 74, 榪欏氨鏄痶ext 绔疘MAGE_SECTION_HEADER澶?br><br>闂細1.8<br>鍘熸潵鐜勬満鍦ㄨ繖閲屽憖銆傛垜璇曡瘯鐪嬨傚摝錛岀湅瑙佷簡錛屽湪1B8澶勩?鍓?涓?br>瀛楄妭鏄妭鍚嶇О銆傚悗闈㈢殑00 00 00 28 鍒板簳鏄墿鐞嗗湴鍧榪樻槸铏氭嫙澶у皬錛?br>錛堝伔鍋風殑錛岃櫄鎷熷ぇ灝忥紝琛ㄧず鍐呭瓨涓彧鏈?x28涓瓧鑺傛湁鏁堬紝鍏跺畠鍏ㄦ槸0錛夛紝鍦ㄥ悗闈?0 00 10 00 鏄櫄鎷熺浉瀵瑰湴鍧 淇楃ОRVA, 灝辨槸鍦ㄥ唴瀛樹腑鐩稿涓庤搗濮嬪湴鍧鐨勫亸縐匯傚啀鍚庨潰00 00 02 00 涓篠izeOfRawData錛?灝辨槸鏂囦歡涓ぇ灝忥紝鍐嶅悗闈?00 00 04 00 鏄?br>PointerToRawData錛屾槸鏂囦歡鐨勫亸縐?鍚庨潰鏈変笁涓狣WORD 鍏ㄦ槸0錛屼粬浠?br>鏄噸瀹氫綅淇℃伅鍜岃鍙鳳紝寰堝ソ錛孍XE鏂囦歡鍙互涓嶇敤綆¤繖浜涖傛渶鍚庝竴涓?br>60 00 00 20 浠h〃灞炴у彲璇伙紝鍙啓錛屾槸浠g爜銆傚ソ錛屾垜緇堜簬鐞嗚В浣犵殑絎竴鍙ヨ瘽浜嗐?br>涓嶈В閲婁竴涓嬶紝鎴戞庝箞鑳戒竴涓嬪瓙鍚殑鎳傚憿錛?璋㈣阿浣犮?br>閭d箞鎴戝張鏈夐棶棰樹簡銆傞偅紼嬪簭閽堢湡鏄悳绱㈣繖涓?text瀛楃涓叉壘鍒癟ext 鑺傝〃澶村悧錛?br>絳旓細1.8<br>涓嶆槸銆傚墠闈㈣榪囷紝鑺傝〃澶寸揣闅廜ptional header 涔嬪悗銆?br><br>闂細1.9<br>Optional header 緇撴瀯鍙橀噺澶錛屾垜鏁頒簡涓涓嬮兘娌℃暟娓咃紝鍒板簳鍗犲灝戜釜瀛楄妭鍛紵<br>絳旓細1.9<br>姝g瓑鐫浣犺繖涓闂憿錛熸槸鍟婏紝鏁伴兘鏁頒笉娓咃紝綰墊槸鐜板湪璁頒綇浜嗗皢鏉ヤ篃瀹規槗蹇樸?br>浼拌寰蔣涔熸兂鍒頒簡榪欎竴鐐癸紝浠栨妸OPTION header 鐨勫ぇ灝忔斁鍒頒簡 _IMAGE_FILE_HEADER 鐨勪竴涓彉閲忎腑錛?br>涓嬮潰鏄痏IMAGE_FILE_HEADER 鐨勫畾涔?br>ty<span id="hvzpftn" class=highlight><strong><font color=#ff0000>pe</font></strong></span>def struct _IMAGE_FILE_HEADER {<br>WORD Machine;<br>WORD NumberOfSections;<br>DWORD TimeDateStamp;<br>DWORD PointerToSymbolTable;<br>DWORD NumberOfSymbols;<br>WORD SizeOfOptionalHeader;<br>WORD Characteristics;<br>} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;<br>SizeOfOptionalHeader 涓鑸繪槸0xE0<br><br>闂細1.10<br>鎴戜粖澶╁凡緇忓浜嗕笉灝戜笢瑗夸簡錛岀湅鏍峰瓙鍚庨潰榪樺緢澶氱殑鏍峰瓙銆傚啀闂渶鍚庝竴涓棶棰樸?br>FILE_HEADER 鍦ㄦ枃浠朵粈涔堜綅緗憿銆?br>絳旓細1.10<br>榪欎釜綆鍗曪紝灝卞湪PE鏍囪瘑絎﹀悗闈€傜湅鍒頒簡鍚楋紝鍦–0澶勶紝ascii 鏄疨E. 浜岃繘鍒舵槸50 45 00 00<br><br>浠e鐢燂細<br>鍝︼紝鐪嬪埌浜嗭紝浠婂ぉ10涓棶棰樺凡緇忔弧浜嗭紝鎴戣繕鎯沖錛屽彲鏄湁鐐圭瘡浜嗐傘傘?br>浠h佸笀錛?br>浠婂ぉ灝卞埌榪欓噷鍚э紝濂藉ソ浼戞伅涓涓嬨?br><br><br>寮曡█錛?涓婁竴嬈′互hello.exe 涓轟緥錛屼粙緇嶄簡<span id="hvzpftn" class=highlight><strong><font color=#ff0000>pe</font></strong></span> 鏂囦歡澶達紝鑺傝〃鍜屽鍏ヨ〃銆?br>榪欎竴嬈℃垜浠互 count.dll 涓轟緥錛屼粙緇嶅鍑鴻〃鍜岄噸瀹氫綅琛?br>count.dll 鏄綏浜戞枌win32姹囩紪緙栫▼涓殑渚嬪瓙紼嬪簭錛屽洜鍏剁煭灝忥紝鏁呰閫変腑銆?br><br>闂?.1錛歞ll 涓轟粈涔堝彨鍔ㄦ佽繛鎺ュ簱錛屼笌騫沖父鐨勯潤鎬佽繛鎺ユ湁浠涔堜笉鍚屻?br>絳?.1錛氶潤鎬佽繛鎺ュ簱鍦ㄧ紪璇戣繛鎺ユ椂鐢眑ink 紼嬪簭鎶婂簱鏂囦歡鐩存帴娣誨姞鍒拌繍琛岀▼搴忎腑銆?br>鍔ㄦ佽繛鎺ュ簱鍦ㄧ紪璇戣繛鎺ユ椂鍙槸鎶婃彃妗╁姞鍒頒唬鐮侀噷銆傝繍琛屾椂鐢卞姞杞藉櫒杞藉叆<br>鍐呭瓨錛屼慨鏀規彃妗╀唬鐮佷嬌鎸囧悜姝g‘鐨勫湴鍧銆傝繖涓繃紼嬪湪涓婁竴璁蹭腑宸茬粡璇磋繃浜嗐?br><br>闂?.2錛氭棦鐒舵槸搴撳嚱鏁幫紝灝變細鏈変竴鍫嗗嚱鏁版瀯鎴愶紝閭d箞鏄惁姣忎釜鍑芥暟閮藉彲浠ヨ澶栬竟璋冪敤鍛紵<br>絳?.2錛氬簱鍑芥暟鍙垎涓轟笁綾伙紝涓涓槸搴撳叆鍙e嚱鏁般?br>涓綾諱負鍙澶栭儴璋冪敤錛屽彨瀵煎嚭搴撳嚱鏁般?br>涓綾諱笉鑳借澶栭儴璋冪敤錛屾垜浠彨瀹冪鏈夊嚱鏁板惂銆傚洜涓哄畠娌℃湁鍚戝鎻愪緵鎺ュ彛銆?br><br>闂?.3錛氬鍑哄嚱鏁版槸鎬庢牱鍚戝鎻愪緵鎺ュ彛鐨勫憿錛?鎴栬呰鎴戜滑鎬庢牱鎵嶈兘浣跨敤瀵煎嚭鍑芥暟鍛紵<br>絳?.3錛?榪欎釜闂鏄垜浠殑閲嶇偣錛屾垜浠粨鍚堝疄渚嬫潵鍚э紝鎱㈡參鎶婂畠璁叉竻妤氥?br>鐢╱ltraedit 鎵撳紑榪欎釜dll 鏂囦歡銆?br>ultraedit鐪嬪埌鐨勬槸鏈鍘熷鐨勬枃浠訛紝鍏跺畠浼楀鐨?span class=highlight><strong><font color=#ff0000>pe</font></strong></span> 鍒嗘瀽杞歡閮芥槸浠庡師濮嬫枃浠跺垎鏋愬緱鍒扮殑銆傚摝錛屽綋鐒訛紝榪欒瘽璇寸殑澶氫綑浜嗐?br>澶ф嫻忚涓涓嬭繖涓枃浠躲?br>鍖哄垎涓涓媎os澶達紝 PE 澶達紝 鑺傝〃錛?鏈夊嚑涓潡緇勬垚銆傝繖浜涢兘鏄緢鏄庢樉鐨勩備笂涓璁蹭腑宸茬粡璇磋繃浜嗐?br>鍝︼紝涓婁竴璁茶鐨勬槸exe, 榪欓噷鏄痙ll, 涓嶈繃瀹冧滑閮芥槸PE 鏂囦歡錛?鏍煎紡鏄竴鏍風殑銆?br><br>欏轟究澶嶄範涓涓嬩笂嬈″唴瀹癸紝榪欏彲浠ヨ鏄笂嬈?璁茬殑綺懼崕浜嗭紝鍗存槸浠ount.dll 涓轟緥錛屽悓鏍烽氫織鏄撴噦錛?br>dos 澶達細 鏍囪 "MZ"<br>00000000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ?........ ..<br>00000010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ?......@.......<br>00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................<br>00000030 00 00 00 00 00 00 00 00 00 00 00 00 C0 00 00 00 ............?..<br>PE 澶達細 鏍囪 "PE"<br>000000C0 50 45 00 00 4C 01 04 00 F6 34 EB 3C 00 00 00 00 PE..L...??....<br>000000D0 00 00 00 00 E0 00 0E 21 0B 01 05 0C 00 02 00 00 ....?.!........ <br>浠巇os澶?0x3c 澶勪篃鑳界湅鍑篜E 澶翠綅緗?br>鑺傝〃錛?鏈夋槑鏄劇殑瀛楃涓叉爣璁幫紝姝ゅ鏄?.text"<br>000001B0 2E 74 65 78 74 00 00 00 .text...<br>000001C0 70 00 00 00 00 10 00 00 00 02 00 00 00 04 00 00 p...............<br>000001D0 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`<br>000001E0 2E 72 64 61 74 61 00 00 BC 00 00 00 00 20 00 00 .rdata..?... ..<br>000001F0 00 02 00 00 00 06 00 00 00 00 00 00 00 00 00 00 ................<br>00000200 00 00 00 00 40 00 00 40 2E 64 61 74 61 00 00 00 ....@..@.data...<br>00000210 04 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 .....0..........<br>00000220 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 C0 ............@..?<br>00000230 2E 72 65 6C 6F 63 00 00 2C 00 00 00 00 40 00 00 .reloc..,....@..<br>00000240 00 02 00 00 00 08 00 00 00 00 00 00 00 00 00 00 ................<br>00000250 00 00 00 00 40 00 00 42 ....@..B........ <br>鏁頒竴鏁拌妭琛ㄦ湁4涓?br>浠嶱E 澶?0xc7澶勪篃鑳界湅鍑烘潵銆?br>澶ц嚧嫻忚涓涓嬪悗闈㈢殑鏁版嵁鍧楀垝鍒嗭紝鍧椾笌鍧椾箣闂村緢瀹規槗璇嗗埆錛屽洜涓烘瘡涓鍧椾箣闂撮兘鏈夊緢澶?錛?br>瀹冧滑鏄互512瀛楄妭瀵歸綈濉厖鐨勩?br>鍜︼紒 鎬庝箞鍙湅鍒頒簡3鍧楋紝 鑺傝〃澶翠腑涓嶆槸璇?鍧楀悧錛?br>鍐嶄粩緇嗗鐓т竴涓嬭妭琛ㄥご錛氳窡鎴戜竴鍧楁壘鎵俱?br>00000400 55 8B EC B8 01 00 00 00 C9 C2 0C 00 55 8B EC 6A U瀣?...闄?.U瀣眏<br>00000410 01 FF 75 10 FF 75 0C FF 75 08 E8 4B 00 00 00 C9 . . . .閻?..?<br>00000420 C2 0C 00 55 8B EC FF 05 00 30 00 10 FF 35 00 30 ?.U瀣?.0.. .0<br>00000430 00 10 FF 75 0C FF 75 08 E8 CF FF FF FF A1 00 30 .. . .鏌?0<br>00000440 00 10 C9 C2 08 00 55 8B EC FF 0D 00 30 00 10 FF ..闄?.U瀣?.0.. br /> 00000450 35 00 30 00 10 FF 75 0C FF 75 08 E8 AC FF FF FF 5.0.. . .鐠?br /> 00000460 A1 00 30 00 10 C9 C2 08 00 CC FF 25 00 20 00 10 ?0..闄?.?%. ..<br>00000470 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ <br>榪欐鏄?text 孌碉紝鍥犱負鑺傝〃宸茬粡璇翠簡錛宼ext 孌靛唴瀛樺湴鍧0x1000,澶у皬0x70<br>鍦ㄦ枃浠朵腑澶勪簬鍋忕Щ0x400, 鍗犵敤鏂囦歡澶у皬0x200 瀛楄妭銆?br><br>00000600 38 20 00 00 00 00 00 00 30 20 00 00 00 00 00 00 8 ......0 ......<br>00000610 00 00 00 00 48 20 00 00 00 20 00 00 00 00 00 00 ....H ... ......<br>00000620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................<br>00000630 38 20 00 00 00 00 00 00 27 02 53 65 74 44 6C 67 8 ......'.SetDlg<br>00000640 49 74 65 6D 49 6E 74 00 55 53 45 52 33 32 2E 64 ItemInt.USER32.d<br>00000650 6C 6C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ll..............<br>00000660 00 00 00 00 F6 34 EB 3C 00 00 00 00 9C 20 00 00 ....??....?..<br>00000670 01 00 00 00 02 00 00 00 02 00 00 00 88 20 00 00 ............?..<br>00000680 90 20 00 00 98 20 00 00 46 10 00 00 23 10 00 00 ?..?..F...#...<br>00000690 A8 20 00 00 B2 20 00 00 00 00 01 00 43 6F 75 6E ?..?......Coun<br>000006A0 74 65 72 2E 64 6C 6C 00 5F 44 65 63 43 6F 75 6E ter.dll._DecCoun<br>000006B0 74 00 5F 49 6E 63 43 6F 75 6E 74 00 00 00 00 00 t._IncCount.....<br>000006C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ <br>榪欐鏄?rdata 孌碉紝鍥犱負鑺傝〃宸茬粡璇翠簡錛宺data 孌靛唴瀛樺湴鍧0x2000,澶у皬0xbc<br>鍦ㄦ枃浠朵腑澶勪簬鍋忕Щ0x600, 鍗犵敤鏂囦歡澶у皬0x200 瀛楄妭銆?br><br><br>00000800 00 10 00 00 18 00 00 00 28 30 2E 30 3E 30 4B 30 ........(0.0>0K0<br>00000810 51 30 61 30 6C 30 00 00 00 00 00 00 00 00 00 00 Q0a0l0..........<br>00000820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................<br>榪欐鏄?reloc 孌碉紝鍥犱負鑺傝〃宸茬粡璇翠簡錛宺eloc 孌靛唴瀛樺湴鍧0x4000,澶у皬0x20<br>鍦ㄦ枃浠朵腑澶勪簬鍋忕Щ0x800, 鍗犵敤鏂囦歡澶у皬0x200 瀛楄妭銆?br><br>鍝︼紒涔燂紒鏂囦歡鍒嗘瀽瀹屼簡銆?br>鍛︼紝涓嶆槸璇寸湅鐪嬩涪浜嗗摢涓鍧楀悧錛?鏄痙ata 孌典涪浜嗐傜湅鐪嬭妭琛ㄦ庝箞璇達細<br>鑺傝〃宸茬粡璇翠簡錛宒ata 孌靛唴瀛樺湴鍧0x4000,澶у皬0x4<br>鍦ㄦ枃浠朵腑澶勪簬鍋忕Щ0x0, 鍗犵敤鏂囦歡澶у皬0x0 瀛楄妭銆?br>鎬笉寰楁枃浠朵腑鎵句笉鍒板畠鐨勮釜褰憋紝鍘熸潵瀹冧笉瀛樺湪銆備絾鍐呭瓨涓繕鏄粰瀹冪暀浜嗕綅緗?br>涓嶈繃榪欓噷鏄釜鐗逛緥錛屼竴鑸枃浠墮兘浼氭湁data 孌電殑瀛樺湪銆?br><br>錛堝皬澹拌錛夊埆楂樺叴澶棭浜嗭紝榪欏彧鏄垝鍒嗕簡鍚勪釜鍧楋紝鎶婃瘡鍧楃殑鍏蜂綋鍐呭鍒嗘瀽瀹屾墠綆楀畬<br>鍝︼紝涔?<br>涓嬮潰鎴戜滑鍐嶈緇嗗垎鏋愪竴涓嬪悇涓鍔熻兘銆?br>text 孌典負鏍稿績錛屽叾瀹冩閮芥槸涓哄畠鏈嶅姟鐨勩?br>text 孌?br>鍗充唬鐮佹錛岀敱鎸囦護闆嗘瀯鎴愩備綘鍙互鍙嶆眹緙栧嚭榪欓儴鍒嗗唴瀹癸紝灝辯煡閬撳畠浠殑鍔熻兘浜嗐?br>涓轟簡鏈笘鐨勫畬鏁存э紝鎴戞妸瀹冭創榪囨潵錛屽茍涓嶉暱銆?br>10001000 EntryPoint:<br>10001000 55 push ebp<br>10001001 8BEC mov ebp,esp<br>10001003 B801000000 mov eax,00000001h<br>10001008 C9 leave<br>10001009 C20C00 retn 000Ch<br>;----------------------------------------------------------------------------------------------------<br>1000100C SUB_L1000100C:<br>1000100C 55 push ebp<br>1000100D 8BEC mov ebp,esp<br>1000100F 6A01 push 00000001h<br>10001011 FF7510 push [ebp+10h]<br>10001014 FF750C push [ebp+0Ch]<br>10001017 FF7508 push [ebp+08h]<br>1000101A E84B000000 call jmp_USER32.dll!SetDlgItemInt<br>1000101F C9 leave<br>10001020 C20C00 retn 000Ch<br>;----------------------------------------------------------------------------------------------------<br>10001023 _IncCount:<br>10001023 55 push ebp<br>10001024 8BEC mov ebp,esp<br>10001026 FF0500300010 inc [L10003000]<br>1000102C FF3500300010 push [L10003000]<br>10001032 FF750C push [ebp+0Ch]<br>10001035 FF7508 push [ebp+08h]<br>10001038 E8CFFFFFFF call SUB_L1000100C<br>1000103D A100300010 mov eax,[L10003000]<br>10001042 C9 leave<br>10001043 C20800 retn 0008h<br>;----------------------------------------------------------------------------------------------------<br>10001046 _DecCount:<br>10001046 55 push ebp<br>10001047 8BEC mov ebp,esp<br>10001049 FF0D00300010 dec [L10003000]<br>1000104F FF3500300010 push [L10003000]<br>10001055 FF750C push [ebp+0Ch]<br>10001058 FF7508 push [ebp+08h]<br>1000105B E8ACFFFFFF call SUB_L1000100C<br>10001060 A100300010 mov eax,[L10003000]<br>10001065 C9 leave<br>10001066 C20800 retn 0008h<br>;----------------------------------------------------------------------------------------------------<br>10001069 CC Align 2<br>1000106A jmp_USER32.dll!SetDlgItemInt:<br>1000106A FF2500200010 jmp [********] //鏁呮剰鎶婂悕瀛楅殣鍚簡<br>;----------------------------------------------------------------------------------------------------<br>浠g爜鍒嗕笁綾伙細<br>絎竴綾諱笌鍦板潃鏃犲叧錛屽畠浠簩榪涘埗浠g爜宸茬粡瀹氫笅鏉ヤ簡<br>絎簩綾諱笌鍦板潃鏈夊叧錛屽畠浠簩榪涘埗浠g爜涔熷畾涓嬫潵浜嗭紝濡傛灉dll 鍔犺澆鍒板畠鐨勯粯璁ゅ湴鍧錛屼唬鐮佷笉鐢ㄤ慨鏀?br>絎笁綾繪槸浠g爜榪樻病鏈夌‘瀹氾紝鐢ㄦ彃妗╂潵琛ㄧず銆傚錛?br>jmp [********], 瀹冪殑鎻掓々鏄?10002000 鍦板潃<br><br>鍏堟潵瑙e喅鎻掓々闂鍚э紝榪欏氨鏄痟ello.exe 璁插駭涓殑瀵煎叆琛ㄩ棶棰樸?br>1. 鍐呭瓨鍦板潃 10002000-10000000(image_base) = 2000(RVA)<br>璇村疄璇濓紝image_base 鎴戣涓嶆竻浣嶇疆錛屼篃娌℃湁鏄庢樉鏍囪錛屾瘡嬈¤鏌ョ粨鏋勫亸縐匯?br>濂藉湪dll 閫氬父鏄?0000000,exe 閫氬父鏄?00000錛屼笉鏌ヤ篃娌℃湁闂銆?br>鎴戝張鏌ヤ簡涓杈癸紝鍋忕Щ鏄疨E 鏍囪瘑鍚庯紙涓嶅寘鎷琍E00鏍囪瘑錛夌13 涓狣WORD 鍋忕Щ澶勩傚姞娣辯偣鍗拌薄錛岃窡IAT鍦ㄧ洰褰曢」鍋忕Щ涓鏍?br><br>2. RVA -> offset: 浠庤妭琛ㄧ煡 RVA 0x2000== offset 0x600錛?br>3. [0x600] == 2038, RVA 2038==offset 638, [0x638]== "0207 setDlgItemInt", 鍓嶉潰鏄鍑哄簭鍙鳳紝鍚庨潰鏄鍑哄悕縐?br>; ---------------------------------------------------------------------------<br>loader 瑙e喅鎻掓々鐨勯棶棰樻槸浠庡鍏ヨ〃寮濮嬬殑銆傚鍏ヨ〃鏄洰褰曢」鐨勭浜岄」錛?br>00000140 08 20 00 00 28 00 00 00 . ..(...<br><br>瀵煎叆琛ㄦ寚鍚戝鍏ュ嚱鏁板簱鏁扮粍銆?br>RVA 2008 == offset 608, length=0x28 (涓涓鍏ヨ〃緇撴瀯涓?涓狣WORD-0x14, 鏁?x28涓轟袱欏癸紝涓涓湁鏁堥」錛屼竴涓叏0灝炬爣璇嗭級<br>絎竴欏癸細<br>originFirstThunk == 2030, RVA 2030==offset 630 (IAT 鐨勫浠斤紝渚涗綘鐪嬬殑錛?br>Name = 2048, RVA 2048 = offset 648 == "USER32.dll"<br>FirstThunk == 2000錛?RVA 2000 == offset 600 (IAT loader 鍔犺澆鏃朵細鏇存敼榪欎竴閮ㄥ垎錛屼互瀹屾垚鎻掓々錛?br>瀵煎叆琛ㄧ粰鍑轟簡"USER32.dll"錛屾彃妗╁2038 緇欏嚭浜嗗嚱鏁板悕"setDlgItemInt", loader 鏍規嵁榪欎簺淇℃伅瀹屾垚鎻掓々銆?br>; ---------------------------------------------------------------------------<br>鑷蟲鎴戜滑宸茬粡澶嶄範浜唄ello.exe 涓榪囩殑涓滆タ浜嗐?br><br>闂?.4錛氬叾瀹炶瘽璇寸殑瓚婂瓚婁笉娓呮錛岃秺灝戣秺瀹規槗鎵艱錛屾妸瀵煎叆琛ㄩ儴鍒嗗啀姒傛嫭涓涓嬫妸銆?br>絳?.4錛氬鍏ヨ〃鍦╮data 鍩熴?br>絎竴閮ㄥ垎涓哄鍏ュ湴鍧琛紝榪欓儴鍒唋oader 鍦ㄥ姞杞芥椂浼氫慨鏀瑰叾鏁板煎畬鎴愭彃妗┿?br>絎簩閮ㄥ垎涓哄鍏ヨ〃銆傚鍏ヨ〃鏄負IAT 鏈嶅姟鐨勶紝loader 瑕佷慨鏀笽AT, 蹇呴』瑕佺煡閬撳鍏ュ嚱鏁扮殑鍚嶇О銆?br>榪欑敱瀵煎叆琛ㄦ彁渚涖傚鍏ヨ〃鍚屾椂榪樻彁渚涳紝璇ュ嚱鏁板悕璐熻矗IAT 琛ㄤ腑鍝竴涓尯闂淬?br>鎵浠ワ紝瀵煎叆琛ㄦ槸瀵煎叆鍑芥暟搴撴暟緇勩傛瘡涓粨鏋勬湁5涓狣WORD 鍙橀噺錛?涓病鐢ㄣ?br>3涓彉閲忓叏鏄疪VA, 涓涓寚鍚戝嚱鏁板悕錛屼竴涓寚鍚慖AT, 鍙︿竴涓篃鎸囧悜IAT錛屽湪緇撴瀯鏈鍓嶉潰,浣嗚繖涓狪AT loader 涓嶄細鏇存敼瀹冦?br>絎笁閮ㄥ垎鎸夊湴鐞嗕綅緗垝鍒嗘槸IAT 鐨勫浠借〃錛屽氨鏄鍏ヨ〃涓璒rigin_FirstThunk鎸囧悜鐨勯儴鍒嗐?br>絎洓閮ㄥ垎鏄鍏ュ嚱鏁板悕琛紝鍓嶉潰鏄簭鍙峰鍑猴紝鍚庨潰绱ц窡鍚嶇О瀵煎嚭銆備慨鏀規彃妗╁綋鐒惰鐢ㄨ繖浜涗俊鎭?br>絎簲閮ㄥ垎涓哄嚱鏁板簱鍚嶇О鍖哄煙銆傚洜涓哄鍏ヨ〃鍙彁渚汻VA, RVA鎸囧悜鐨勬槸榪欎釜鍖哄煙銆?br><br>闂?.5錛氬ソ錛岃繖鏍蜂竴鐪媟data 鐨勪笂鍗婇儴鍒嗘剰涔夊氨鏄庣櫧浜嗭紝閭d笅闈㈣繕鏈変竴閮ㄥ垎鍐呭鍛紵<br>絳?.5錛氳繖灝辨槸榪樻病寮濮嬭鐨勫鍑鴻〃浜嗐傚鍑鴻〃姣斿鍏ヨ〃綆鍗曘傚洜涓哄鍏ヨ〃鍙兘浠庡ソ鍑犱釜搴撲腑瀵煎叆錛?br>鑰屽鍑鴻〃鍙槸灝嗚嚜宸辯殑鐩稿叧鍑芥暟瀵煎嚭銆?br><br>闂?.6錛氫負浠涔堣鎶婂鍑鴻〃鍜屽鍏ヨ〃鏀懼埌涓璧峰憿銆?br>絳?.6錛氬洜涓哄畠浠殑灞炴х浉鍚屻傜湅鑺傝〃rdata. 0x40000040,涓や釜灞炴э紝鎴戞煡浜嗕竴涓嬫枃妗o紝鍓嶉潰閭d釜1浠h〃鍙錛?br>鍚庨潰閭d釜1浠h〃浠g爜鍖呭惈鍒濆鍖栨暟鎹?br><br>闂?.7錛?鍏蜂綋瀵煎嚭琛ㄨ鍖呭惈閭d簺鍐呭鎵嶇畻鎶婂嚱鏁板鍑轟簡鍛紵<br>絳旓細鍛︼紝鎷栬浜嗭紒 浠婂ぉ涓昏鏄涔犱簡涓涓嬪墠杈硅鐨勫唴瀹癸紝涓嬩竴璇炬垜浠啀璁插鍑鴻〃錛? <div style="LINE-HEIGHT: 18px" class=bword>闂?.7錛?dll 鍜?exe 鏂囦歡閮芥槸PE 鏂囦歡錛?鍦≒E 鏂囦歡涓槸鎬庢牱鍖哄垎鐨勫憿錛?br>絳?.7錛氭湁涓浜涘皬宸埆銆?br>渚嬪錛?exe 閫氬父琚姞杞藉埌0x400000, 鑰宒ll 榛樿鍔犺澆鏄?x10000000<br>exe 閫氬父涓嶅惈reloc 孌碉紝鑰宒ll 鍖呭惈銆?br>exe 閫氬父涓嶅惈export 孌碉紝 鑰宒ll 鍖呭惈銆?br>exe 灞炴?10f, 鏈鍚?bit 璇村畠娌℃湁閲嶅畾浣嶄俊鎭?<br>dll 灞炴?10e. 鏈楂樹綅鐨? 璇村畠鏄痙ll, 榪欎釜濂藉儚鏄渶鍏抽敭宸埆浜嗗惂銆?br><br>闂?.8錛歟xe 鐨?entrypoint 鏄▼搴忔墽琛岀殑璧峰鐐癸紝dll 鐨?entrypoint 鏄粈涔堝憿錛?br>絳?.8錛氳繖涓湴鏂規槸dll 鐨勫叆鍙e嚱鏁板湴鍧錛屽畠鏄笉鍙互鐪佺暐鐨勩?br>dll 鍦ㄥ姞杞斤紝鍗歌澆浠ュ強綰跨▼鍔犺澆錛屽嵏杞芥椂閮戒細<br>鍒拌繖閲屾墽琛岀▼搴忋?瀹冪殑閫氱敤緇撴瀯鏄繖鏍風殑銆?br>BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpReserved)<br>{<br>switch(fswReason)<br>case DLL_PROCESS_ATTACH<br>......<br>case DLL_THREAD_ATTACH<br>.....<br>case DLL_THREAD_DETACH<br>.....<br>case DLL_PROCESS_DETACH<br>.... <br>return (TRUE or False) // true , 鎴愬姛錛宖alse 澶辮觸錛?loader 浼氭妸瀹冧粠鍐呭瓨鍗告帀銆?br>} <br>count.dll 涓病鏈夋寜榪欑緇撴瀯錛屽畠鍙槸綆鍗曠殑榪斿洖涓涓猅RUE,鍥犱負瀹冧笉闇瑕佺敵璇峰唴瀛樺拰閲婃斁鍐呭瓨絳夊垵濮嬪寲鎿嶄綔銆?br>count.dll entrypoint 鏄?0001000錛?PE 鏍囪瘑鍚庣10 DWORD 鍦板潃錛岃涓嶄綇鐢ㄥ伐鍏鋒煡銆?br><br>闂?.9錛氬墠闈㈣榪嘾ll 鏈夊叆鍙e嚱鏁幫紝 瀵煎嚭鍑芥暟鍜岄潪瀵煎嚭鍑芥暟銆傚張鍥炲埌涓婃鏈鐨勯棶棰?br>瀵煎嚭琛ㄦ槸鎬庢牱鎶婂嚱鏁板鍑虹殑銆?br>絳?.9錛氭垜浠厛鐚滀竴鐚滃鍑哄嚱鏁扮殑鍏抽敭瑕佺礌鍚с?br>1. 瀵煎嚭搴撳悕縐?br>2. 鍑芥暟瀵煎嚭搴忓彿銆傦紙鎻愪緵搴忓彿瀵煎嚭錛?br>3. 瀵煎嚭鍑芥暟鍚?錛堟彁渚涘嚱鏁板悕瀵煎嚭錛?br>4. 搴忓彿鎴栧嚱鏁板悕瀵瑰簲鐨勫湴鍧銆?br>瀹冨悜緋葷粺鎶ュ憡榪欎簺淇℃伅宸茬粡瓚沖浜嗐?br><br>闂?.10錛?緇撳悎渚嬪瓙鍜岀粨鏋勫畾涔夊叿浣撹涓涓嬪惂銆?br>絳?.10錛?鐪媍ount.dll 鐩綍欏圭涓欏?br>00000130 60 20 00 00 5C 00 00 00 ` ..\... <br>浣嶇疆 RVA 2060 == offset 660<br>澶у皬 0x5c<br>00000660 00 00 00 00 F6 34 EB 3C 00 00 00 00 9C 20 00 00 ....??....?..<br>00000670 01 00 00 00 02 00 00 00 02 00 00 00 88 20 00 00 ............?..<br>00000680 90 20 00 00 98 20 00 00 46 10 00 00 23 10 00 00 ?..?..F...#...<br>00000690 A8 20 00 00 B2 20 00 00 00 00 01 00 43 6F 75 6E ?..?......Coun<br>000006A0 74 65 72 2E 64 6C 6C 00 5F 44 65 63 43 6F 75 6E ter.dll._DecCoun<br>000006B0 74 00 5F 49 6E 63 43 6F 75 6E 74 00 t._IncCount. <br><br>閭d箞榪欐槸涓涓粈涔堟牱鐨勬暟鎹粨鏋勫憿錛熸垜浠厛鐚滅寽鐪嬶紝榪欓噷涔熷彨閫嗗悜<span id="hvzpftn" class=highlight><strong><font color=#ff0000>瀛︿範</font></strong></span>鏂規硶鍚с?br>棣栧厛鍑芥暟鍚嶇О錛歝ount.dll錛坥ffset 69c), 鍑芥暟鍚嶇О_DecCount(offset 6a8), _IncCount(6b2) 閮藉凡緇忕湅鍒頒簡銆?br>杞崲涓篟VA. offset 69c =RVA 209c<br>offset 6a8 =RVA 20a8<br>offset 6b2 =RVA 20b2<br>寰堥珮鍏村湪鏁版嵁涓壘鍒頒簡9c 20, a8 20, b2 20. 鍏蟲敞涓涓嬭繖浜涘湴鍧銆?br>浠?60 鍦ㄦ護涓涓嬶紝鎰熻鍚庨潰鐨?0000002 鍙兘鏄釜鏁板惂銆?br>鍚庤竟鐨?088錛?2090錛?098 <br>RVA 2088 == offset 688 [688] == 46 10 00 00 23 10 00 00 // 鍍忓嚱鏁板湴鍧,璧剁揣紜涓涓嬶紙鍦ㄤ笂涓綃囷級錛屾鏄?br>RVA 2090 == offset 690 [690] == A8 20 00 00 B2 20 00 00 // 鍑芥暟鍚嶇О鍦板潃<br>RVA 2098 == offset 690 [690] == 00 00 01 00 // 鍍廻int<br>榪欐牱鍒掑垎鍚庯紝鐪嬩笉鎳傜殑灝變笉澶氫簡錛?span class=highlight><strong><font color=#ff0000>瀛︿範</font></strong></span>鏁版嵁緇撴瀯鏄椂鍊欎簡銆?br>ty<span id="hvzpftn" class=highlight><strong><font color=#ff0000>pe</font></strong></span>def struct _IMAGE_EXPORT_DIRECTORY {<br>DWORD Characteristics;<br>DWORD TimeDateStamp;<br>WORD MajorVersion;<br>WORD MinorVersion;<br>DWORD Name;<br>DWORD Base;<br>DWORD NumberOfFunctions;<br>DWORD NumberOfNames;<br>DWORD AddressOfFunctions; // RVA from base of image<br>DWORD AddressOfNames; // RVA from base of image<br>DWORD AddressOfNameOrdinals; // RVA from base of image<br>} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;<br>鎴戜滑鍒嗘瀽鐨勬槸瀵圭殑錛岄偅涓猙ase 鏄粈涔堜笢瑗?錛熸槸瀵煎嚭鍑芥暟鐨勫熀搴忓彿銆傛墍浠ュ鍑哄嚱鏁板簭鍙蜂笉鏄?錛?錛岃屾槸1錛? 浜?br>寰堟槑鏄撅紝1鎸囩殑鏄?046鍦板潃錛?鎸囩殑鏄?023鍦板潃<br>闂?.11 鍐嶆葷粨涓涓嬪鍑鴻〃鍚с?br>絳?.11 瀵煎嚭琛ㄦ湁涓ょ瀵煎嚭鏂規硶錛屼竴縐嶆槸鎸夊悕縐板鍑猴紝涓縐嶆槸鎸夊簭鍙峰鍑恒傚叾涓簭鍙峰鍑虹殑涓暟鎬繪槸澶т簬絳変簬鍚嶇О瀵煎嚭鐨勪釜鏁般?br>瀵煎嚭鐨勫嚱鏁板湴鍧鎸?瀛楄妭涓瀛楁帓寮銆傛瘡涓涓嚱鏁扮儲寮曞彿灝辨槸+Base 鍊煎氨鏄鍑哄簭鍙楓?br>搴忓彿涓嶇洿瑙傦紝鎵浠ユ湁浜涘嚱鏁扮敤鍚嶇О瀵煎嚭錛屽悕縐板鍑烘渶緇堣繕鏄鎵懼埌鍑芥暟搴忓彿銆傛墍浠ユ妸鍚嶇О鎵鍦ㄧ殑鍚嶇О鏁扮粍鐨勪綅緗負绱㈠紩<br>鍘諱粠鍚嶇О搴忓彿鏁扮粍涓嬁鍒板簭鍙鳳紙姝や負绱㈠紩鍙鳳級錛岀敱绱㈠紩鍙峰彇鍒板嚱鏁板湴鍧銆?br><br>闂?.12 鍋囧loader 瑕佹彃妗╂湰鍑芥暟 _IncCount 鍦板潃錛屽畠鏄庢牱鎿嶄綔鐨勩?br>絳?.12<br>1. 瀹冮鍏堣鍔犺澆鎴戜滑鐨刣ll. 鐢╨oadlibrary<br>2. 鎵懼埌鎴戜滑鐨勫鍑鴻〃銆?br>3. 鍐嶆壘鍒板鍑鴻〃涓瑼ddressOfNames銆?br>4. 閬嶅巻璇ヨ〃鎵懼埌_IncCount 鍑芥暟錛岃涓嬪畠鐨勭儲寮?br>5. 浠嶢ddressOfNameOrdinals鏁扮粍涓紝鍙栧埌璇ョ儲寮曞搴旂殑鍑芥暟鍦板潃搴忓彿<br>6. 浠庡鍑鴻〃涓壘鍒癆ddressOfFunctions錛?鐢ㄥ緱鍒扮殑搴忓彿鍘誨彇鍒板畠鐨勫湴鍧銆?br>7. 灝嗚鍦板潃鍘誨~鍏呭埌IAT 鐨勫搴斾綅緗笂銆?br><br>榪欐牱鎻掓々灝卞畬鎴愪簡銆傚搰錛佽繖涓皬鎻掓々瑕佺粡榪囪繖涔堝姝ラ鍝囷紝鏈夋病鏈夊姙娉曠畝鍖栦竴涓嬪暒... 絳夌潃浣犲幓瀹炵幇鍛紒<br><br>闂?.13 count.dll 涓繕鏈変竴涓猺eloc 鑺傦紝璁茶瀹冩槸鎬庢牱鏋勬垚鐨勩?br>絳?.13 reloc 涔熸槸涓簍ext 孌墊湇鍔$殑錛屽墠闈㈣榪囷紝鑻ll 鍔犺澆鍒板畠榛樿浣嶇疆錛屽彲浠ヤ笉鐢╮eloc 孌點?br>褰撲笉鑳藉姞杞藉埌榛樿鍦板潃鏃訛紝 鏌愪簺浜庡湴鍧鏈夊叧鐨勬寚浠ら渶瑕侀噸鏂板畾浣嶃傚氨鏄瑕佷慨鏀規寚浠や腑鍦板潃<br>浣垮叾鎸囧悜姝g‘鐨勫湴鍧銆?br>鐪嬬洰褰曢」涓璻eloc 琛紝絎?涓〃錛堢儲寮曞彿涓?錛夛細<br>00000160 00 40 00 00 18 00 00 00 .@......<br>RVA 4000 = offset 800, size=0x18<br>鍝︼紝綰典嬌涓嶇敤reloc 鐩綍欏癸紝鐩存帴鐩涔熺湅瑙佸畠浜嗐傝繖涓▼搴忓緢灝忥紝鏄繖鏍風殑銆?br>00000800 00 10 00 00 18 00 00 00 28 30 2E 30 3E 30 4B 30 ........(0.0>0K0<br>00000810 51 30 61 30 6C 30 00 00 00 00 00 00 00 00 00 00 Q0a0l0..........<br>鎴戜滑涔熷儚export 琛ㄤ竴鏍鳳紝鍏堢寽鐚渞eloc 緇撴瀯搴旇鏈夐偅浜涢噸瑕佸厓绱犮?br>1. 鍐呭瓨鍦板潃錛?4byte, 鎴戜滑瑕佺煡閬撳鍝殑鎸囦護榪涜閲嶅畾浣嶃傚嵆where 闂<br>2. 鏇挎崲鏂規硶銆?鏄浛鎹竴瀛楄妭錛?瀛楄妭榪樻槸4瀛楄妭錛?鏄痟ow 鐨勯棶棰橈紝浼拌鏈夊嚑涓猙it 灝卞浜嗐?br>3. 鐢ㄤ粈涔堟浛鎹€?鏄竴涓獁hat 鐨勯棶棰樸?榪欎釜闂灝變笉鐢ㄨ冭檻浜嗭紝榪欎釜what,灝辨槸鍔犺澆鍦板潃涓庨粯璁ゅ湴鍧鍋忕Щ銆?br>榪欐牱鐪嬭搗鏉ヤ竴涓猺eloc 欏硅嚦灝戜篃瑕?5 bytes 浜嗐傚鏋滄湁寰堝欏癸紝閭h繖寰堝欏瑰氨鏋勬垚涓涓暟緇勩?br>鎴戣繖閲屼粙緇嶇殑鏂規硶鏄竴縐嶉嗗悜鐨?span class=highlight><strong><font color=#ff0000>瀛︿範</font></strong></span>鏂規硶錛屾垨鑰呮槸鍘熷鐨勬濊冩柟娉曘傚洜涓烘垜鎯蟲渶鍒濊璁¤繖涓狿E 緇撴瀯鐨勪漢涔熶細<br>榪欎箞鎯熾?br>鐜板湪浣跨敤鐨凱E 緇撴瀯鍦ㄨ繖涓兂娉曠殑鍩虹涓婅繘琛屼簡浼樺寲錛屼嬌寰梤eloc琛ㄥ崰鐢ㄨ緝灝戠殑瀛楄妭錛?br>鍏蜂綋璇存槸瀹冭涓涓猺eloc 欏瑰崰鐢?byte,涓嬮潰鐪嬪畠鐨勬柟娉曪細<br><br>1.<br>ty<span id="hvzpftn" class=highlight><strong><font color=#ff0000>pe</font></strong></span>def struct _IMAGE_BASE_RELOCATION {<br>DWORD VirtualAddress;<br>DWORD SizeOfBlock;<br>} IMAGE_BASE_RELOCATION;<br><br>瀹冪殑鎰忔濇槸璇達紝瀹冭閲嶅畾浣峍irtualAddress=1000榪欏潡鍖哄煙錛?璇ュ尯鍩熸墍鍗犵殑閲嶅畾浣嶄俊鎭ぇ灝忎負SizeOfBlock=0x18<br>鍚庨潰绱ц窡鐨勬瘡2 涓猙ytes 鏋勬垚涓涓噸瀹氫綅欏癸紝 鍏朵腑浣?2 bit涓洪噸瀹氫綅鍦板潃錛?楂?bits 涓洪噸瀹氫綅綾誨瀷銆?br>鎴戣繖閲屾妸閲嶅畾浣嶇被鍨媍opy 榪囨潵錛屽叾涓湁鐨勫湪x86 涓婃槸鐢ㄤ笉鍒扮殑銆?br>//<br>// Based relocation ty<span id="hvzpftn" class=highlight><strong><font color=#ff0000>pe</font></strong></span>s.<br>//<br><br>#define IMAGE_REL_BASED_ABSOLUTE 0<br>#define IMAGE_REL_BASED_HIGH 1<br>#define IMAGE_REL_BASED_LOW 2<br>#define IMAGE_REL_BASED_HIGHLOW 3<br>#define IMAGE_REL_BASED_HIGHADJ 4<br>#define IMAGE_REL_BASED_MIPS_JMPADDR 5<br>#define IMAGE_REL_BASED_SECTION 6<br>#define IMAGE_REL_BASED_REL32 7<br><br>#define IMAGE_REL_BASED_MIPS_JMPADDR16 9<br>#define IMAGE_REL_BASED_IA64_IMM64 9<br>#define IMAGE_REL_BASED_DIR64 10<br>#define IMAGE_REL_BASED_HIGH3ADJ 11<br><br>鍦板潃鍙湁12涓烘剰鍛崇潃浣犲彧鑳界鐞?K 鑼冨洿錛屾槸鐨勶紝濡傛灉瓚呰繃浜?K鑼冨洿錛屾垜浠噸鏂板畾涔変竴涓狪MAGE_BASE_RELOCATION<br>鍙橀噺灝卞彲浠ヤ簡錛屽畠鍙堣兘綆$悊涓嬩竴涓?K鐨勮寖鍥淬傚悗緇病16bit 涓轟竴涓猺eloc 欏癸紝 鏈灝鵑儴浠?000 緇撳熬銆傚綋鐒訛紝鐢變簬<br>閲嶅畾浣嶅潡澶у皬鏈夊畾涔夛紝綰典嬌涓嶇敤0000鏍囪瘑緇撳熬涔熸病鏈夐棶棰橈紝鎶婅繖閲岀殑鍐椾綑濮戜笖鍙弻淇濋櫓鍚э紝灝辨槸嫻垂浜?bytes<br>count.dll 涓紝鎴戜滑鍏堢畻綆楁湁鍑犱釜閲嶅畾浣嶉」銆傚摝錛屼笉鐢ㄧ畻錛屾湁7涓紝涓鏌ュ氨鏌ュ嚭鏉ヤ簡銆?br>浣嗗綋紼嬪簭澶х殑鏃跺欒繕鏄璁$畻鐨勩?0x18-8)/2-1=7 涓?br>璁$畻鍏紡錛?SizeOfBlock-sizeof(IMAGE_BASE_RELOCATION))/2-1<br><br>闂細5.14 閭h繖7涓噸瀹氫綅欏瑰埌搴曟槸鎬庢牱閲嶅畾浣嶇殑鍛紵榪樻槸緇欏嚭鍏蜂綋緇撴灉鏇村交搴曘?br>絳旓細5.14 濂斤紝鍋氫簨鍋氬埌搴曪紝鐜板湪鎴戜滑灝卞紑濮嬪惂銆?br>絎竴欏癸細28 30 鍏跺唴瀹逛負 0x3028 閲嶅畾浣嶇被鍨嬩負3錛?鍦板潃涓?x28<br>鍏跺畠閲嶅畾浣嶇被鍨嬮兘鏄?錛?鍦板潃涓嶅悓鑰屽凡銆?br>#define IMAGE_REL_BASED_HIGHLOW 3<br>閭d箞榪欎釜BASE_HIGHLOW 鏄粈涔堟剰鎬濆憿錛熸垜浠厛鐪嬬湅0x28澶勭殑鎸囦護銆?br>10001026 FF0500300010 inc [L10003000]<br>鍋囧鎴戜滑鐨刣ll 涓嶆槸琚姞杞藉埌0x10000000錛岃屾槸鍔犺澆鍒?x30000000, 鍗沖悜涓婃彁楂樹簡0x20000000<br>鎴戜滑鍙鎶?x28鍦板潃澶勪篃鍔犱笂0x20000000,灝卞彲浠ヤ簡銆傝繖鏍瘋繖鏉℃寚浠ゅ氨鍙樻垚浜?br>10001026 FF0500300030 inc [L30003000]<br>鐪嬫槑鐧戒簡鍚э紒 紿楁埛綰稿氨鏄繖鏍瘋鎹呯牬鐨?br><br><br>濂戒簡錛屾湰甯栧氨鍒拌繖閲岀粨鏉熷惂錛?/div> <img src ="http://m.shnenglu.com/Walker/aggbug/144121.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Walker/" target="_blank">婕鑰吤?鈥︹?錕?/a> 2011-04-13 14:41 <a href="http://m.shnenglu.com/Walker/articles/144121.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Windows Serviceshttp://m.shnenglu.com/Walker/articles/144118.html婕鑰吤?amp;鈥︹?錕?/dc:creator>婕鑰吤?amp;鈥︹?錕?/author>Wed, 13 Apr 2011 05:53:00 GMThttp://m.shnenglu.com/Walker/articles/144118.htmlhttp://m.shnenglu.com/Walker/comments/144118.htmlhttp://m.shnenglu.com/Walker/articles/144118.html#Feedback0http://m.shnenglu.com/Walker/comments/commentRss/144118.htmlhttp://m.shnenglu.com/Walker/services/trackbacks/144118.htmlServices

1 姒傝堪

1鏈嶅姟紼嬪簭閬靛驚Service Control Manager(SCM)鐨勬帴鍙h鍒欍?/span> 鍚姩鏂瑰紡鐢?/span>3縐嶏細1 緋葷粺鍚姩鏃惰嚜鍔ㄥ惎鍔紱2 閫氳繃鏈嶅姟鎺у埗闈㈡澘;3 閫氳繃浣跨敤鏈嶅姟鍑芥暟銆?/span>2鏈嶅姟鍙互鍦ㄦ病鏈夌敤鎴風櫥褰曞埌緋葷粺鐨勬儏鍐典笅榪愯銆?/span>

2 椹卞姩鏈嶅姟錛?/span>椹卞姩鏈嶅姟閬靛驚璁懼椹卞姩鍗忚錛屽畠涓庢湇鍔$▼搴忕被浼鹼紝浣嗘槸涓嶄笌SCM浜や簰銆?/span>

3 The SCM processes service control notifications in a serial fashion

4 The default security descriptor allows the LocalSystem account, and members of the Administrators and Power Users groups to stop and start services.

 

2 鏈嶅姟鍦?/span>Win7涓殑鏂扮壒鎬?/span>

1 鍙互娉ㄥ唽涓涓湇鍔★紝鍦ㄤ竴涓壒瀹氫簨浠跺彂鐢熸椂鍚姩鎴栬呭仠姝㈡湇鍔°?/span>

鏇存柊鐨勫嚱鏁?/span>

ChangeServiceConfig

Changes the configuration parameters of a service. This function supports managed service accounts and virtual accounts. For more information, see Service Accounts Step-by-Step Guide.

ChangeServiceConfig2

Changes the optional configuration parameters of a service. This function supports new configuration information levels for processor groups and service trigger events.

CreateService

Creates a service object and adds it to the specified service control manager database. This function supports managed service accounts and virtual accounts. For more information, see Service Accounts Step-by-Step Guide.

HandlerEx

An application-defined callback function used with the RegisterServiceCtrlHandlerEx function. This callback function supports new extended control codes for system time changes and service trigger events.

QueryServiceConfig2

Retrieves the optional configuration parameters of a service. This function supports new configuration information levels for processor groups and service trigger events.

SetServiceStatus

Updates the service control manager's status information for the calling service. This function supports new extended control codes for system time changes and service trigger events.

 

鏂扮殑緇撴瀯

SERVICE_TIMECHANGE_INFO

Contains system time change settings.

SERVICE_TRIGGER

Represents a service trigger event.

SERVICE_TRIGGER_INFO

Contains trigger event information for a service.

SERVICE_TRIGGER_SPECIFIC_DATA_ITEM

Contains trigger-specific data for a service trigger event.

Service Changes for Windows Vista

 

涓轟簡鎻愰珮鎬ц兘銆佸彲闈犳с佸畨鍏ㄦс佸彲綆$悊鎬х瓑錛屽湪Vista涔嬪悗錛屾湇鍔℃彁渚涗簡寰堝澧炲己鐨勭壒鎬с?/span>

 

Session 0 Isolation

鏈嶅姟鎬繪槸榪愯鍦?/span>Session 0錛屽湪Vista涔嬪墠錛岀涓涓敤鎴蜂篃鏄繍琛屽湪Session0錛屽湪Vista涔嬪悗錛岀涓涓敤鎴瘋繍琛屽湪Session1錛岀浜屼釜鐢ㄦ埛榪愯鍦?/span>Session2錛?/span> 絳夌瓑錛岃繖鏍風敤鎴風▼搴忓拰鏈嶅姟灝卞緇堣繍琛屽湪涓嶅悓鐨?/span>Session涓娿?/span>Session 0 涓嶆敮鎸佷笌鐢ㄦ埛浜や簰鐨勮繘紼嬨傝繖灝辨剰鍛崇潃Service涓嶈兘鍚戝簲鐢ㄧ▼搴忓彂閫佹秷鎭紝搴旂敤紼嬪簭涔熶笉鑳藉儚Service鍙戦佹秷鎭傞櫎姝や箣澶栵紝Service榪樹笉鑳芥樉紺?/span>GUI錛屽瀵硅瘽妗嗭紝浣嗘槸Service鍙互浣跨敤WTSSendMessage 鍑芥暟鍦ㄥ彟涓涓?/span>Session涓樉紺哄璇濇銆?/span>

Delayed AutoStart 鍦ㄧ郴緇熷惎鍔ㄧ殑涓灝忔鏃墮棿錛?/span>shortly after錛夊唴鍚姩鏈嶅姟銆?/span>

Failure Detection and Recovery錛氬鏋滄湇鍔″け璐ワ紝SCM鍙互鎵ц澶辮觸action錛屽閲嶅惎鏈嶅姟銆?/span>

Preshutdown Notifications錛氭槸鏈嶅姟鏈夎凍澶熺殑鏃墮棿鏉ヤ紭闆呯殑鍏抽棴銆?/span>

Restricted Network Acess錛?/span>

Running with Least Privilage錛?/span>

 

鍏充簬鏈嶅姟

SCM緇存姢鑰呭凡瀹夎鐨勬湇鍔″拰椹卞姩鏈嶅姟鐨勬暟鎹簱錛屽茍涓旀彁渚涗簡緇熶竴鐨勫畨鍏ㄧ殑鎺у埗瀹冧滑鐨勬柟娉曘傛暟鎹簱淇℃伅鍖呮嫭姣忎釜鏈嶅姟濡備綍琚惎鍔ㄣ?/span>

涓嬮潰綾誨瀷鐨勭▼搴忎嬌鐢?/span>SCM鎻愪緵鐨勫嚱鏁幫細

鏈嶅姟紼嬪簭錛?/span>Service Program錛夛細涓涓負涓涓垨鑰呭涓湇鍔℃彁渚涘彲鎵ц浠g爜鐨勭▼搴忋傛湇鍔$▼搴忎嬌鐢ㄨ繛鎺ュ埌SCM鐨勫嚱鏁頒互鍙婂彂閫佺姸鎬佷俊鎭粰SCM鐨勫嚱鏁般?/span>

鏈嶅姟閰嶇疆紼嬪簭錛?/span>Service configuration program錛夛細涓涓煡璇㈠拰淇敼鏈嶅姟鏁版嵁搴撶殑紼嬪簭銆傛湇鍔¢厤緗▼搴忎嬌鐢ㄦ墦寮鏁版嵁搴撶殑鍑芥暟錛屽湪鏁版嵁搴撲腑瀹夎鍜屽垹闄ゆ湇鍔★紝瀵瑰畨瑁呯殑鏈嶅姟鏌ヨ鍜屼慨鏀歸厤緗弬鏁幫紝瀹夊叏鍙傛暟銆傛湇鍔¢厤緗▼搴忕鐞嗘湇鍔′互鍙婇┍鍔ㄦ湇鍔°?/span>

鏈嶅姟鎺у埗紼嬪簭錛?/span>Service Control Program錛夛細涓涓惎鍔ㄥ茍鎺у埗鏈嶅姟浠ュ強椹卞姩鏈嶅姟鐨勭▼搴忋傛湇鍔℃帶鍒剁▼搴忎嬌鐢ㄥ彂閫佽姹傚埌SCM鐨勫嚱鏁般?/span>

Service Control Manager(鏈嶅姟鎺у埗綆$悊鍣?/span>)

1 緋葷粺鍚姩鏃跺惎鍔紱瀹冩槸涓涓?/span>RPC (Remote procedure call) 鏈嶅姟鍣ㄣ傛墍浠ユ湇鍔¢厤緗拰鏈嶅姟鎺у埗紼嬪簭鍙互鍦ㄨ繙紼嬫満鍣ㄤ笂綆$悊鏈嶅姟銆?/span>

鎻愪緵鎺ュ彛鍔熻兘錛?/span>

綆$悊瀹夎鏈嶅姟鐨勬暟鎹簱錛?/span>

鍚姩鏈嶅姟錛堢郴緇熷惎鍔ㄦ椂錛屾垨鑰呴渶瑕佹椂錛?/span>

鏋氫婦瀹夎鐨勬湇鍔?/span>

涓鴻繍琛岀殑鏈嶅姟緇存姢鐘舵佷俊鎭?/span>

浼犺緭鎺у埗璇鋒眰錛?/span>control request錛夌粰姝e湪榪愯鐨勬湇鍔?/span>

閿佸畾鍜岃В閿佹湇鍔℃暟鎹簱銆?/span>

Database of installed service

鍦ㄦ敞鍐岃〃涓淮鎶ょ潃宸插畨瑁呯殑鏈嶅姟鍒楄〃銆傛敞鍐岃〃濡備笅

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services.

榪欎釜閿間負姣忎竴涓畨瑁呯殑鏈嶅姟鍖呭惈涓涓瓙閿紝瀛愰敭鐨勫悕瀛楀氨鏄湇鍔″悕銆?/span>

Database鍙堝彨浣?/span>ServiceActive databse鎴栬?/span>SCM database銆備綘蹇呴』浣跨敤SCM鎻愪緵鐨勫嚱鏁幫紝鑰屼笉鑳界洿鎺ヤ慨鏀?/span>databse錛屽嵆涓嶈兘鐩存帴淇敼娉ㄥ唽琛ㄣ?/span>

鑷姩鍚姩鏈嶅姟

鍦ㄧ郴緇熷惎鍔ㄧ殑鏃跺?/span>,SCM灝嗗惎鍔ㄦ墍鏈夎嚜鍚姩鐨勬湇鍔′互鍙婂畠浠緷璧栫殑鏈嶅姟銆?/span>

鍚姩欏哄簭錛?/span>

1 鎸夊姞杞藉惎鍔ㄧ粍鍒楄〃涓殑欏哄簭錛涜繖涓俊鎭繚瀛樺湪ServiceGroupOrder鍊間腑錛?/span>

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control

2 GroupOrderList

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control

3 姣忎釜鏈嶅姟鐨勪緷璧栧垪琛?/span>

褰撳惎鍔ㄥ畬鎴愬悗錛岀郴緇熸墽琛屽惎鍔ㄨ璇佺▼搴忥紙boot verification program錛夋牴鎹?/span>BootVerificationProgram

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control.

榛樿鎯呭喌涓嬶紝榪欎釜鍊兼槸娌℃湁璁劇疆鐨勩備綘鍙互鎻愪緵紼嬪簭鏉ユ嫻嬬郴緇燂紝璋冪敤NotifyBootConfigStatus閫氱煡SCM錛屾姤鍛?/span>boot 鐘舵併?/span>

鍦ㄦ垚鍔熼噸鍚悗錛岀郴緇熶細灝嗙粍鍐岃〃澶嶅埗涓浠藉埌涓嬮潰鐩綍涓?/span>last-known-good (LKG) configuration

HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services

鎸夐渶鍚姩鏈嶅姟

褰撴湇鍔″惎鍔ㄤ箣鍚庯紝SCM鎵ц涓嬪垪姝ラ錛?/span>

鑾峰彇瀛樺偍鍦ㄦ暟鎹簱涓殑甯愭埛淇℃伅

鐧誨綍鍒版湇鍔″笎鎴?/span>

鍔犺澆鐢ㄦ埛閰嶇疆

鍦ㄦ殏鍋滅姸鎬佷笅鍒涘緩鏈嶅姟

緇欒繘紼嬪垎閰嶄竴涓?/span>Logon鐨?/span>token

鍏佽榪涚▼鎵ц

Service Record List

鐢變簬姣忎釜鏈嶅姟瀹炰綋鏄粠娉ㄥ唽琛ㄦ暟鎹簱涓鍙栫殑錛屽洜姝?/span>SCM涓烘瘡涓湇鍔″垱寤轟簡涓涓?/span>Service Record錛?/span>

涓涓?/span>Service Record鍖呮嫭錛?/span>

鏈嶅姟鍚?/span>

鍚姩綾誨瀷

鏈嶅姟鐘舵侊紙SERVICE_STATUS緇撴瀯錛?/span>

鎸囧悜渚濊禆鏈嶅姟鍒楄〃鐨勬寚閽?/span>

鏈嶅姟鍦ㄥ畨瑁呯殑鏃跺欑敤鎴峰悕鍜屽瘑鐮佹槸鎸囧畾濂界殑銆?/span>SCM鍦ㄦ敞鍐岃〃涓瓨鏀劇敤鎴峰悕錛屽湪Local Security Authority錛?/span>LSA錛変腑瀛樻斁瀵嗙爜銆?/span>

SCM淇濆瓨涓や喚鐢ㄦ埛瀵嗙爜銆備竴涓綋鍓嶅瘑鐮佸拰涓涓浠藉瘑鐮併傚湪鏈嶅姟絎竴嬈″畨瑁呯殑鏃跺欎嬌鐢ㄥ綋鍓嶅瘑鐮侊紝澶囦喚瀵嗙爜鏄湭鍒濆鍖栫殑銆傚綋鐢ㄥ綋鍓嶅瘑鐮佽繍琛屾湇鍔℃垚鍔熷悗錛屾墠浼氬皢褰撳墠瀵嗙爜鍐欏叆鍒板浠藉瘑鐮併?/span>SCM鍦ㄦ敹鍒版湇鍔$姸鎬侀氱煡鍚庢洿鏂版湇鍔$姸鎬併?/span>

椹卞姩鏈嶅姟鐨勭姸鎬佹槸閫氳繃鏌ヨIO緋葷粺鑾峰緱鐨勶紝鑰屼笉鏄氳繃鐘舵侀氱煡錛岃繖鐐規槸涓?/span>Service涓嶅悓鐨勩?/span>

SCM Handles

SCM鏀寔鍙ユ焺錛?/span>Handle錛夋潵璁塊棶涓嬮潰鐨勫璞°?/span>

宸插畨瑁呯殑鏈嶅姟鐨勬暟鎹簱錛氱敤SCManager object鏉ヨ〃紺?/span>

鏈嶅姟錛氱敱涓涓畨瑁呯殑鏈嶅姟浠h〃鏈嶅姟瀵硅薄銆?/span>

鏁版嵁搴撻攣

Service Programs鏈嶅姟紼嬪簭

Main鍑芥暟錛?/span>

璋冪敤StartServiceCtrlDispatcher鍑芥暟榪炴帴鍒?/span>SCM騫跺惎鍔?/span>control dispatcher綰跨▼銆?/span>Control dispatcher綰跨▼寰幆loop錛岀瓑寰呭湪dispatch table涓寚瀹氱殑鏈嶅姟鐨勮姹傘?/span>

渚嬪瓙錛?/span>

void __cdecl _tmain(int argc, TCHAR *argv[])

{

    // If command-line parameter is "install", install the service.

    // Otherwise, the service is probably being started by the SCM.

 

    if( lstrcmpi( argv[1], TEXT("install")) == 0 )

    {

        SvcInstall();

        return;

    }

 

    // TO_DO: Add any additional services for the process to this table.

    SERVICE_TABLE_ENTRY DispatchTable[] =

    {

        { SVCNAME, (LPSERVICE_MAIN_FUNCTION) SvcMain },

        { NULL, NULL }

    };

 

    // This call returns when the service has stopped.

    // The process should simply terminate when the call returns.

 

    if (!StartServiceCtrlDispatcher( DispatchTable ))

    {

        SvcReportEvent(TEXT("StartServiceCtrlDispatcher"));

    }

}

ServiceMain鍑芥暟錛?/span>

棣栧厛璋冪敤RegisterServiceCtrlHandler鍑芥暟鏉ユ敞鍐?/span>SvcCtrHandler鍑芥暟浣滀負鏈嶅姟鐨勫鐞嗗嚱鏁幫紝鐒跺悗寮濮嬪垵濮嬪寲銆?/span>

VOID WINAPI SvcMain( DWORD dwArgc, LPTSTR *lpszArgv )

{

    // Register the handler function for the service

 

    gSvcStatusHandle = RegisterServiceCtrlHandler(

        SVCNAME,

        SvcCtrlHandler);

 

    if( !gSvcStatusHandle )

    {

        SvcReportEvent(TEXT("RegisterServiceCtrlHandler"));

        return;

    }

 

    // These SERVICE_STATUS members remain as set here

 

    gSvcStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;

    gSvcStatus.dwServiceSpecificExitCode = 0;   

 

    // Report initial status to the SCM

 

    ReportSvcStatus( SERVICE_START_PENDING, NO_ERROR, 3000 );

 

    // Perform service-specific initialization and work.

 

    SvcInit( dwArgc, lpszArgv );

}

 

//

// Purpose:

//   The service code

//

// Parameters:

//   dwArgc - Number of arguments in the lpszArgv array

//   lpszArgv - Array of strings. The first string is the name of

//     the service and subsequent strings are passed by the process

//     that called the StartService function to start the service.

//

// Return value:

//   None

//

VOID SvcInit( DWORD dwArgc, LPTSTR *lpszArgv)

{

    // TO_DO: Declare and set any required variables.

    //   Be sure to periodically call ReportSvcStatus() with

    //   SERVICE_START_PENDING. If initialization fails, call

    //   ReportSvcStatus with SERVICE_STOPPED.

 

    // Create an event. The control handler function, SvcCtrlHandler,

    // signals this event when it receives the stop control code.

 

    ghSvcStopEvent = CreateEvent(

                         NULL,    // default security attributes

                         TRUE,    // manual reset event

                         FALSE,   // not signaled

                         NULL);   // no name

 

    if ( ghSvcStopEvent == NULL)

    {

        ReportSvcStatus( SERVICE_STOPPED, NO_ERROR, 0 );

        return;

    }

 

    // Report running status when initialization is complete.

 

    ReportSvcStatus( SERVICE_RUNNING, NO_ERROR, 0 );

 

    // TO_DO: Perform work until service stops.

 

    while(1)

    {

        // Check whether to stop the service.

 

        WaitForSingleObject(ghSvcStopEvent, INFINITE);

 

        ReportSvcStatus( SERVICE_STOPPED, NO_ERROR, 0 );

        return;

    }

}

 

//

// Purpose:

//   Sets the current service status and reports it to the SCM.

//

// Parameters:

//   dwCurrentState - The current state (see SERVICE_STATUS)

//   dwWin32ExitCode - The system error code

//   dwWaitHint - Estimated time for pending operation,

//     in milliseconds

//

// Return value:

//   None

//

VOID ReportSvcStatus( DWORD dwCurrentState,

                      DWORD dwWin32ExitCode,

                      DWORD dwWaitHint)

{

    static DWORD dwCheckPoint = 1;

 

    // Fill in the SERVICE_STATUS structure.

 

    gSvcStatus.dwCurrentState = dwCurrentState;

    gSvcStatus.dwWin32ExitCode = dwWin32ExitCode;

    gSvcStatus.dwWaitHint = dwWaitHint;

 

    if (dwCurrentState == SERVICE_START_PENDING)

        gSvcStatus.dwControlsAccepted = 0;

    else gSvcStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;

 

    if ( (dwCurrentState == SERVICE_RUNNING) ||

           (dwCurrentState == SERVICE_STOPPED) )

        gSvcStatus.dwCheckPoint = 0;

    else gSvcStatus.dwCheckPoint = dwCheckPoint++;

 

    // Report the status of the service to the SCM.

    SetServiceStatus( gSvcStatusHandle, &gSvcStatus );

}

 

Control Handler鍑芥暟錛?/span>

璇ュ嚱鏁版槸鐢?/span>dispatcher thread璋冪敤鐨勶紝瀹冨鐞嗗湪OpCode鍙傛暟涓紶榪涙潵鐨勬帶鍒剁爜錛岀劧鍚庤皟鐢?/span>ReportSvcStatus鍑芥暟鏉ユ洿鏂版湇鍔$姸鎬併傚綋Handler鏀跺埌鎺у埗鐮佹椂錛屽彧鏈夊綋鏀跺埌鐨勬帶鍒剁爜寮曡搗鏈嶅姟鐘舵佸彉鍖栨椂鎵嶆姤鍛婃湇鍔$姸鎬併?/span>

VOID WINAPI SvcCtrlHandler( DWORD dwCtrl )

{

   // Handle the requested control code.

 

   switch(dwCtrl)

  

      case SERVICE_CONTROL_STOP:

         ReportSvcStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);

 

         // Signal the service to stop.

 

         SetEvent(ghSvcStopEvent);

         ReportSvcStatus(gSvcStatus.dwCurrentState, NO_ERROR, 0);

        

         return;

 

      case SERVICE_CONTROL_INTERROGATE:

         break;

 

      default:

         break;

   }

  

}

Service Configuration Program Tasks鏈嶅姟閰嶇疆紼嬪簭鐨勪換鍔?/span>

瀹夎鏈嶅姟

鍒犻櫎鏈嶅姟

鏀瑰彉鏈嶅姟閰嶇疆

鏌ヨ鏈嶅姟閰嶇疆

Service Control Program Tasks鏈嶅姟鎺у埗紼嬪簭浠誨姟

鍚姩鏈嶅姟

鍋滄鏈嶅姟

鏀瑰彉涓涓湇鍔$殑DACL

 

Service Functions

The following functions are used or implemented by services.

Function

Description

Handler

An application-defined callback function used with the RegisterServiceCtrlHandler function.

HandlerEx

An application-defined callback function used with the RegisterServiceCtrlHandlerEx function.

RegisterServiceCtrlHandler

Registers a function to handle service control requests.

RegisterServiceCtrlHandlerEx

Registers a function to handle extended service control requests.

ServiceMain

An application-defined function that serves as the starting point for a service.

SetServiceBits

Registers a service type with the service control manager and the Server service.

SetServiceStatus

Updates the service control manager's status information for the calling service.

StartServiceCtrlDispatcher

Connects the main thread of a service process to the service control manager.

 

The following functions are used by programs that control or configure services.

Function

Description

ChangeServiceConfig

Changes the configuration parameters of a service.

ChangeServiceConfig2

Changes the optional configuration parameters of a service.

CloseServiceHandle

Closes the specified handle to a service control manager object or a service object.

ControlService

Sends a control code to a service.

ControlServiceEx

Sends a control code to a service.

CreateService

Creates a service object and adds it to the specified service control manager database.

DeleteService

Marks the specified service for deletion from the service control manager database.

EnumDependentServices

Retrieves the name and status of each service that depends on the specified service.

EnumServicesStatusEx

Enumerates services in the specified service control manager database based on the specified information level.

GetServiceDisplayName

Retrieves the display name of the specified service.

GetServiceKeyName

Retrieves the service name of the specified service.

NotifyBootConfigStatus

Reports the boot status to the service control manager.

NotifyServiceStatusChange

Enables an application to receive notification when the specified service is created or deleted or when its status changes.

OpenSCManager

Establishes a connection to the service control manager on the specified computer and opens the specified service control manager database.

OpenService

Opens an existing service.

QueryServiceConfig

Retrieves the configuration parameters of the specified service.

QueryServiceConfig2

Retrieves the optional configuration parameters of the specified service.

QueryServiceObjectSecurity

Retrieves a copy of the security descriptor associated with a service object.

QueryServiceStatusEx

Retrieves the current status of the specified service based on the specified information level.

SetServiceObjectSecurity

Sets the security descriptor of a service object.

StartService

Starts a service.

Service Structures

The following structures are used with services:



]]>
64-bit C/C++ applications http://m.shnenglu.com/Walker/articles/144117.html婕鑰吤?amp;鈥︹?錕?/dc:creator>婕鑰吤?amp;鈥︹?錕?/author>Wed, 13 Apr 2011 05:14:00 GMThttp://m.shnenglu.com/Walker/articles/144117.htmlhttp://m.shnenglu.com/Walker/comments/144117.htmlhttp://m.shnenglu.com/Walker/articles/144117.html#Feedback0http://m.shnenglu.com/Walker/comments/commentRss/144117.htmlhttp://m.shnenglu.com/Walker/services/trackbacks/144117.html闃呰鍏ㄦ枃

]]>
OnEraseBkGnd涓嶰nPaint鐨勮仈緋繪槸浠涔堬紵http://m.shnenglu.com/Walker/articles/144098.html婕鑰吤?amp;鈥︹?錕?/dc:creator>婕鑰吤?amp;鈥︹?錕?/author>Wed, 13 Apr 2011 02:42:00 GMThttp://m.shnenglu.com/Walker/articles/144098.htmlhttp://m.shnenglu.com/Walker/comments/144098.htmlhttp://m.shnenglu.com/Walker/articles/144098.html#Feedback0http://m.shnenglu.com/Walker/comments/commentRss/144098.htmlhttp://m.shnenglu.com/Walker/services/trackbacks/144098.html鐨凮nEraseBkGnd鍙槸閲嶇敾鑳屾櫙鍒欎笉浼氭湁闂儊.鑰屽湪OnPaint閲岄潰,
鐢變簬瀹冮殣鍚殑璋冪敤浜哋nEraseBkGnd,鑰屼綘鍙堟病鏈夊鐞哋nEraseBkGnd
鍑芥暟,榪欐椂灝卞拰紿楀彛緙虹渷鐨勮儗鏅埛鐩稿叧浜?緙虹渷鐨?
OnEraseBkGnd鎿嶄綔浣跨敤紿楀彛鐨勭己鐪佽儗鏅埛鍒鋒柊鑳屾櫙(涓鑸儏鍐?
涓嬫槸鐧藉埛),鑰岄殢鍚庝綘鍙堣嚜宸遍噸鐢昏儗鏅犳垚灞忓箷闂姩.
鍙﹀涓涓棶棰樻槸OnEraseBkGnd涓嶆槸姣忔閮戒細琚皟鐢ㄧ殑.濡傛灉浣?
璋冪敤Invalidate鐨勬椂鍊欏弬鏁頒負TRUE,閭d箞鍦∣nPaint閲岄潰闅愬惈
璋冪敤BeginPaint鐨勬椂鍊欏氨浜х敓WM_ERASEBKGND娑堟伅,濡傛灉鍙傛暟
鏄疐ALSE,鍒欎笉浼氶噸鍒瘋儗鏅?

鎵浠ヨВ鍐蟲柟娉曟湁涓変釜鍗?
1.鐢∣nEraseBkGnd瀹炵幇,涓嶈璋冪敤鍘熸潵鐨凮nEraseBkGnd鍑芥暟.
2.鐢∣nPaint瀹炵幇,鍚屾椂閲嶈澆OnEraseBkGnd,鍏朵腑鐩存帴榪斿洖.
3.鐢∣nPaint瀹炵幇,鍒涘緩紿楀彛鏃惰緗儗鏅埛涓虹┖
4.鐢∣nPaint瀹炵幇,浣嗘槸瑕佹眰鍒鋒柊鏃剁敤Invalidate(FALSE)榪欐牱
鐨勫嚱鏁?(涓嶈繃榪欑鎯呭喌涓?紿楀彛瑕嗙洊絳夐犳垚鐨勫埛鏂拌繕鏄闂竴
涓?鎵浠ヤ笉鏄交搴曠殑瑙e喅鏂規硶)
閮芥尯綆鍗曠殑.
------------------------------------------------------
鍦∕FC涓?浠諱綍涓涓獁indow緇勪歡鐨勭粯鍥?閮芥槸鏀懼湪榪欎袱涓猰ember function涓?br>鍦ㄨ瀹氫笂 OnEraseBkgnd()鏄敤鏉ョ敾搴曞浘鐨?鑰孫nPaint()鏄敤鏉ョ敾涓昏瀵硅薄鐨?br>涓句緥璇存槑 涓涓寜閽槸鐏拌壊鐨?涓婇潰榪樻湁鏂囧瓧
鍒橭nEraseBkgnd()鎵鍋氱殑浜嬪氨鏄妸鎸夐挳鐢繪垚鐏拌壊
鑰孫nPaint()鎵鍋氱殑浜?灝辨槸鐢諱笂鏂囧瓧

鏃㈢劧榪欎袱涓猰ember function閮芥槸鐢ㄦ潵鐢誨嚭緇勪歡鐨?br>閭d負浣曡繕瑕佸垎OnPaint() 涓?OnEraseBkgnd() 鍛?br>鍏跺疄OnPaint() 涓?OnEraseBkgnd() 鐗規ф槸鏈夊樊鐨?br>1. OnEraseBkgnd()鐨勮姹傛槸蹇?鍦ㄩ噷闈㈢殑緇樺浘紼嬪簭鏈濂芥槸涓嶈澶楁椂闂?br>鍥犱負 姣忓綋window緇勪歡鏈変換浣曞皬鍙樺姩 閮戒細椹笂鍛煎彨OnEraseBkgnd()
2. OnPaint() 鏄彧鏈夊湪紼嬪簭鏈夌┖闂茬殑鏃跺欐墠浼氳鍛煎彨
3. OnEraseBkgnd() 鏄湪 OnPaint() 涔嬪墠鍛煎彨鐨?br>鎵浠?OnPaint()琚懠鍙竴嬈′箣鍓?鍙兘浼氬懠鍙玂nEraseBkgnd()濂藉嚑嬈?br>

濡傛灉鎴戜滑鏄竴涓湪鍋氬浘褰㈠寲浣跨敤鑰呮帴鍙g殑浜?br>甯鎬細闇瑕佹妸涓寮犵編緹庣殑鍥劇墖璁句負鎴戜滑dialog鐨勫簳鍥?br>鎶婄粯鍥劇殑紼嬪簭浠g爜鏀懼湪OnPaint() 涔嬩腑 鍙兘浼氬父紕板埌涓浜涢棶棰?br>姣旀柟璇存嫋鏇充竴涓獥鍙e湪鎴戜滑鍋氱殑dialog涓婇潰涓鐩寸Щ鍔?br>鍒檇ialog浼氬彉鎴愮伆鑹?鐩村埌鍔ㄤ綔鍋滄鎵嶆仮澶?br>榪欐槸鍥犱負姣忔闇瑕侀噸緇樼殑鏃跺?紼嬪簭閮戒細椹笂鍛煎彨OnEraseBkgnd()
OnEraseBkgnd()灝辨妸dialog鐢繪垚鐏拌壊
鑰屽彧鏈夊姩浣滃仠姝箣鍚?紼嬪簭鎵嶄細鍛煎彨OnPaint() 榪欐椂鎵嶄細鎶婃垜浠鐢葷殑搴曞浘璐翠笂鍘?br>

榪欎釜闂鐨勮В娉?姣旇緝宸偣鐨勬柟娉曟槸鎶奜nEraseBkgnd() 鏀瑰啓鎴愪笉鍋氫簨鐨刦unction
濡備笅鎵紺?br>BOOL CMyDlg::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
浠ヤ笂鏈潵鏄細鍛煎彨CDialog::OnEraseBkgnd() 浣嗘槸濡傛灉鎴戜滑涓嶅懠鍙殑璇?br>紼嬪簭渚夸笉浼氱敾涓婄伆鑹茬殑搴曡壊浜?br>

姣旇緝濂界殑鍋氭硶鏄洿鎺ュ皢緇樺浘鐨勭▼搴忎粠OnPaint()縐誨埌OnEraseBkgnd()鏉ュ仛
濡備笅鎵紺?br>
// m_bmpBKGND 涓轟竴CBitmap瀵硅薄 涓斾簨鍏堟棭宸插姞杞芥垜浠殑搴曞浘
// 搴曞浘鐨勫ぇ灝忎笌鎴戜滑鐨勭獥鍙lient澶у皬涓鑷?br>

BOOL CMyDlg::OnEraseBkgnd(CDC* pDC)
{
CRect rc;
GetUpdateRect(&rc);
CDC srcDC;
srcDC.CreateCompatibleDC(pDC);
srcDC.SelectObject(m_bmpBKGND);

pDC->BitBlt(rc.left,rc.top,rc.GetWidth(),
rc.GetHeight(),&srcDC,rc.left,rc.top,SRCCOPY);
return TRUE;
}

鐗瑰埆瑕佹敞鎰忕殑鏄?鍙栧緱閲嶇敾澶у皬鏄嬌鐢℅etUpdateRect() 鑰屼笉鏄疓etClientRect()
濡傛灉浣跨敤GetClientRect() 浼氭妸涓嶈閲嶇敾鐨勫湴鏂歸噸鐢?br>
鍙﹀涓嶆帹鑽愪嬌鐢℅etUpdateRect()錛屽緢澶氭儏鍐典笅榪欎釜鍑芥暟鍦∣nEraseBkGnd閲岃皟鐢ㄤ細鏈夐棶棰橈紝寤鴻浣跨敤GetClipBox()

棣栧厛錛宼r0j4n鏄ソ蹇冧漢錛屽啓寰楄繖涔堥暱銆備絾濂藉儚涓嶅鍝︺?br>
搴旇鏄繖鏍風殑鍚э紝褰揥indows紜畾瀹㈡埛鍖洪渶瑕侀噸緇樻椂錛屽畠棣栧厛鍙戦乄M_ERASEBKGND娑堟伅緇欑獥鍙h繃紼嬶紝鐢盬M_ERASEBKGND娑堟伅鐨勯粯璁ゅ鐞嗙敤鐧借壊鐢誨埛鍒烽櫎鑳屾櫙錛岀劧鍚庡啀鍙戦乄M_PAINT娑堟伅緇欑獥鍙h繃紼嬶紝鐢盬M_PAINT娑堟伅鐨勫搷搴旂▼搴忚礋璐g粯鐢誨鎴峰尯鍐呭銆傛垨鑰呰錛屽綋Windows紜畾瀹㈡埛鍖洪渶瑕侀噸緇樻椂錛屽畠鍒嗗埆鍙戦乄M_ERASEBKGND鍜學M_PAINT娑堟伅錛岀敱榪欎袱涓秷鎭殑鍝嶅簲紼嬪簭鍒嗗埆璐熻矗鍒烽櫎鑳屾櫙鍜岄噸鐢誨鎴峰唴瀹廣?br>
鑷抽棯鐑佺殑闂錛屾槸鐢變簬鍒烽櫎鑳屾櫙浠ュ悗錛屽湪WM_PAINT鏈墽琛屽畬鎴愪箣鍓嶏紝windows宸叉妸瑙嗛鍗$殑緙撳瓨杈撳嚭鍒板睆騫曚笂浜嗐?br> 

濡備綍鎿﹂櫎涔嬪墠鐨勮儗鏅浘鐗囷紵

鎴戞槑鐧介棶棰樻墍鍦ㄤ簡錛屼綘鐨勯棶棰樻槸褰撶獥鍙eぇ灝忓彉鍖栨椂錛屽師鏉ョ殑鑳屾櫙娌℃湁琚竻闄わ紝閫犳垚鍥劇墖閲嶅彔鏄劇ず錛屼綘涓婇潰鐨勪唬鐮佹病鏈夐棶棰橈紝鍐欏湪OnEraseBkgnd()涓繕鏄啓鍦∣nPaint()涓殑緇撴灉閮芥槸涓鏍風殑錛屾渶涓昏鐨勫師鍥犳槸錛屽綋鎴戜滑鏀瑰彉紿楀彛澶у皬鏃訛紝瑙﹀彂WM_SIZE娑堟伅錛岃岄粯璁ょ殑OnSize鍦ㄥ唴閮ㄨ皟鐢↖nvalidate鏃剁敤鐨勫弬鏁版槸錛欼nvalidate(FLASE);涔熷氨鏄笉鍒鋒柊鑳屾櫙鐨勩傛墍浠ュ師鏉ョ殑鑳屾櫙鍒蜂笉鎺?br>瑙e喅鐨勬柟娉曟槸澶勭悊WM_SIZE錛屽湪OnSize()涓紝璋冪敤錛欼nvalidate(TRUE);寮哄埗鍒鋒柊鑳屾櫙灝辮浜嗐?br>

]]>
杞琹og4cplushttp://m.shnenglu.com/Walker/articles/143404.html婕鑰吤?amp;鈥︹?錕?/dc:creator>婕鑰吤?amp;鈥︹?錕?/author>Mon, 04 Apr 2011 07:57:00 GMThttp://m.shnenglu.com/Walker/articles/143404.htmlhttp://m.shnenglu.com/Walker/comments/143404.htmlhttp://m.shnenglu.com/Walker/articles/143404.html#Feedback0http://m.shnenglu.com/Walker/comments/commentRss/143404.htmlhttp://m.shnenglu.com/Walker/services/trackbacks/143404.html闃呰鍏ㄦ枃

]]>
杞歡宸ョ▼閰嶇疆瑙勮寖錛圴C2005錛?絎簩鐗?錛堣漿錛?/title><link>http://m.shnenglu.com/Walker/articles/143403.html</link><dc:creator>婕鑰吤?amp;鈥︹?錕?/dc:creator><author>婕鑰吤?amp;鈥︹?錕?/author><pubDate>Mon, 04 Apr 2011 07:46:00 GMT</pubDate><guid>http://m.shnenglu.com/Walker/articles/143403.html</guid><wfw:comment>http://m.shnenglu.com/Walker/comments/143403.html</wfw:comment><comments>http://m.shnenglu.com/Walker/articles/143403.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Walker/comments/commentRss/143403.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Walker/services/trackbacks/143403.html</trackback:ping><description><![CDATA[<div id="hvzpftn" class=post> <h2><a id=viewpost1_TitleUrl href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html"><font color=#223355>杞歡宸ョ▼閰嶇疆瑙勮寖錛圴C2005錛?絎簩鐗?/font></a> </h2> <div id="hvzpftn" class=postbody><a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html">杞嚜http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html</a> <p><br><strong></strong></p> <p><strong></strong></p> <p><strong>鐗?/strong><strong> </strong><strong>鏈?/strong><strong> </strong><strong>鎺?/strong><strong> </strong><strong>鍒?/strong><strong></strong> <table border=1 cellSpacing=0 cellPadding=0> <tbody> <tr> <td vAlign=top width=121> <p><strong>鐗堟湰鍙?/strong><strong></strong></p> </td> <td vAlign=top width=122> <p><strong>鏃ユ湡</strong><strong></strong></p> </td> <td vAlign=top width=121> <p><strong>淇敼鑰?/strong><strong></strong></p> </td> <td vAlign=top width=122> <p><strong>璇存槑</strong><strong></strong></p> </td> <td vAlign=top width=122> <p><strong>澶囨敞</strong><strong></strong></p> </td> </tr> <tr> <td vAlign=top width=121> <p>0.1</p> </td> <td vAlign=top width=122> <p>2010.07.13</p> </td> <td vAlign=top width=121> <p>phoenix</p> </td> <td vAlign=top width=122> </td> <td vAlign=top width=122> </td> </tr> <tr> <td vAlign=top width=121> <p>0.2</p> </td> <td vAlign=top width=122> <p>2011.01.12</p> </td> <td vAlign=top width=121> <p>phoenix</p> </td> <td vAlign=top width=122> </td> <td vAlign=top width=122> </td> </tr> <tr> <td vAlign=top width=121> </td> <td vAlign=top width=122> </td> <td vAlign=top width=121> </td> <td vAlign=top width=122> </td> <td vAlign=top width=122> </td> </tr> <tr> <td vAlign=top width=121> </td> <td vAlign=top width=122> </td> <td vAlign=top width=121> </td> <td vAlign=top width=122> </td> <td vAlign=top width=122> </td> </tr> <tr> <td vAlign=top width=121> </td> <td vAlign=top width=122> </td> <td vAlign=top width=121> </td> <td vAlign=top width=122> </td> <td vAlign=top width=122> </td> </tr> </tbody> </table> </p> <p><strong><br></strong></p> <p>鐩?褰?/p> <p><a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#_Toc282612780"><font color=#1d58d1>1. 寮曡█... 1</font></a></p> <p><a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#_Toc282612781"><font color=#1d58d1>1.1. 緙栧啓鐩殑.. 1</font></a></p> <p><a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#_Toc282612782"><font color=#1d58d1>1.2. 鍙傝冭祫鏂?. 1</font></a></p> <p><a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#_Toc282612783"><font color=#1d58d1>2. 鐩綍緇撴瀯... 1</font></a></p> <p><a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#_Toc282612784"><font color=#1d58d1>3. 宸ョ▼閰嶇疆... 2</font></a></p> <p><a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#_Toc282612785"><font color=#1d58d1>4. 灞炴ч厤緗?.. 2</font></a></p> <p><a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#_Toc282612786"><font color=#1d58d1>4.1. “甯歌”閰嶇疆.. 2</font></a></p> <p><a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#_Toc282612787"><font color=#1d58d1>4.2. “璋冭瘯”閰嶇疆.. 2</font></a></p> <p><a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#_Toc282612788"><font color=#1d58d1>4.3. “C/C++”閰嶇疆.. 3</font></a></p> <p><a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#_Toc282612789"><font color=#1d58d1>4.4. “閾炬帴鍣?#8221;閰嶇疆.. 3</font></a></p> <p><a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#_Toc282612790"><font color=#1d58d1>4.5. “鐢熸垚浜嬩歡”閰嶇疆.. 3</font></a></p> <p><a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#_Toc282612791"><font color=#1d58d1>5. 闄勫綍錛歏C2005涓彲浠ヤ嬌鐢ㄧ殑瀹?.. 3</font></a></p> <p><strong><font color=#1d58d1></font></strong></p> <h3><a name=_Toc282612780><font color=#1d58d1>1.寮曡█</font></a></h3> <h4><a name=_Toc282612781><font color=#1d58d1>1.1.緙栧啓鐩殑</font></a></h4> <p>褰撳紑鍙戜漢鍛樺紑濮嬭繘琛岀紪鐮佸伐浣滀互鍙婄紪鐮佸伐浣滅殑榪囩▼涓紝閮介渶瑕佹牴鎹伐紼嬬殑闇瑕侀厤緗悇縐嶅伐浣滆礬寰勶紝濡傚紩鍏ョ涓夋柟搴撱佽緭鍑虹敓鎴愮殑澶存枃浠跺拰搴撴枃浠剁瓑銆備互鍓嶉儴鍒嗗紑鍙戜漢鍛樺宸ョ▼璺緞鐨勫畾涔夋瘮杈冮殢鎰忥紝鐩稿綋涓閮ㄥ垎浣跨敤鐨勬槸緇濆璺緞銆傚鏋滃彧鏄崟涓紑鍙戜漢鍛樺畬鎴愪竴涓崟涓鐨勫姛鑳斤紝榪欑鍋氭硶鐪嬭搗鏉ユ病鏈変粈涔堟槑鏄劇殑緙虹偣銆備絾鏄紝濡傛灉鏄暟涓紑鍙戜漢鍛樻潵鍚堜綔鍏卞悓瀹屾垚涓涓姛鑳藉拰緇撴瀯閮藉緢澶嶆潅鐨勫伐紼嬫椂錛岃繖縐嶅仛娉曠殑寮婄灝卞嚫鏄懼嚭鏉ャ備竴涓潪甯告槑鏄劇殑闂灝辨槸錛氬紑鍙戜漢鍛楢灝嗕粬鐨勫伐紼嬩氦緇欏紑鍙戜漢鍛楤緙栬瘧鏃訛紝濡傚伐紼嬪畾涔変嬌鐢ㄤ簡緇濆璺緞錛岄櫎闈炲紑鍙戜漢鍛楤鐨勮綆楁満涓嶢鐨勮綆楁満鍏鋒湁瀹屽叏鐩稿悓鐨勬枃浠剁粍緇囩粨鏋勶紝鍚﹀垯涓嬈℃х紪璇戦氳繃鏄笉鍙兘銆傚彟澶栵紝褰撳紑鍙戜漢鍛樺湪涓闀夸覆鐨?#8220;Can’t find …”鎴栬?#8220;XXX undefined”鐨勯敊璇笌璀﹀憡涓劍澶寸儌棰濇椂錛屼篃璁稿彧鏄洜涓轟竴涓笉璧風溂鐨勫湴鏂逛嬌鐢ㄤ簡緇濆璺緞錛屾垨鑰呮槸澶у皬鍐欑殑宸紓銆?/p> <p>鍥犳錛岃鑼冨紑鍙戜漢鍛樼殑宸ョ▼閰嶇疆鏄緢鏈夊繀瑕佺殑銆傞氳繃瑙勮寖鐨勫伐紼嬮厤緗紝鎵鏈夊紑鍙戜漢鍛樹箣闂寸殑宸ョ▼鏄棤緙濊鎺ョ殑錛屽嵆浠諱綍涓涓紑鍙戜漢鍛樼殑宸ョ▼鎷垮埌鍏朵粬浜虹殑宸ョ▼鏃訛紝鏃犻』淇敼浠諱綍涓涓厤緗究鍙互涓嬈℃х殑緙栬瘧鎴愬姛銆傝繖鏍風殑瑙勮寖鎿嶄綔鏃犲紓鍙互澶уぇ鍑忓皯鍥㈤槦鎴愬憳閫氳繃浠g爜浜ゆ祦鏃剁殑涓嶅繀瑕佹垚鏈傚彟澶栵紝瑙勮寖鐨勫伐紼嬮厤緗篃渚夸簬SubVersion鐗堟湰鎺у埗緋葷粺鐨勫紩鍏ワ紝閫氳繃寮曞叆SubVersion鐗堟湰鎺у埗緋葷粺錛屽彲浠ュ崗璋冩暣涓爺鍙戝洟闃熺殑宸ョ▼榪涘害錛屾帶鍒朵駭鍝佺殑閲岀▼紕戝彂甯冦傝繖涓鍒囷紝閮戒粠瑙勮寖鐨勫伐紼嬮厤緗紑濮嬨?/p> <h4><a name=_Toc282612782><font color=#1d58d1>1.2.鍙傝冭祫鏂?/font></a></h4> <p>1. 銆奜penSource SubVersion瑙勮寖銆?/p> <p>2. 銆奦isual Studio 2005緙栫▼鎸囧崡銆?/p> <h3><a name=_Toc282612783><font color=#1d58d1>2.鐩綍緇撴瀯</font></a></h3> <p>MyDevelopeFolder</p> <p>鈹溾攢Bin</p> <p>鈹?鈹溾攢Debug</p> <p>鈹?鈹溾攢Program</p> <p>鈹?鈹溾攢Release</p> <p>鈹?鈹溾攢UnicodeDebug</p> <p>鈹?鈹溾攢UnicodeProgram</p> <p>鈹?鈹斺攢UnicodeRelease</p> <p>鈹溾攢MySDK</p> <p>鈹?鈹溾攢Include</p> <p>鈹?鈹?鈹溾攢BCG</p> <p>鈹?鈹?鈹斺攢Boost</p> <p>鈹?鈹斺攢Lib</p> <p>鈹?鈹溾攢Debug</p> <p>鈹?鈹?鈹溾攢BCG</p> <p>鈹?鈹?鈹斺攢Boost</p> <p>鈹?鈹溾攢Program</p> <p>鈹?鈹?鈹溾攢BCG</p> <p>鈹?鈹?鈹斺攢Boost</p> <p>鈹?鈹溾攢Release</p> <p>鈹?鈹?鈹溾攢BCG</p> <p>鈹?鈹?鈹斺攢Boost</p> <p>鈹?鈹溾攢UnicodeDebug</p> <p>鈹?鈹?鈹溾攢BCG</p> <p>鈹?鈹?鈹斺攢Boost</p> <p>鈹?鈹溾攢UnicodeProgram</p> <p>鈹?鈹?鈹溾攢BCG</p> <p>鈹?鈹?鈹斺攢Boost</p> <p>鈹?鈹斺攢UnicodeRelease</p> <p>鈹?鈹溾攢BCG</p> <p>鈹?鈹斺攢Boost</p> <p>鈹溾攢Project</p> <p>鈹?鈹溾攢LibMyExample</p> <p>鈹?鈹?鈹斺攢Document</p> <p>鈹?鈹斺攢MyExampleApp</p> <p>鈹?鈹斺攢Document</p> <p>鈹溾攢Solution</p> <p>鈹斺攢Temp</p> <p>鈹溾攢Compile</p> <p>鈹斺攢Link</p> <p>1. MyDevelopeFolder鏄紑鍙戝伐紼嬬殑鏍圭洰褰?/p> <p>2. Bin鐩綍瀛樻斁鎵鏈夊姩鎬侀摼鎺ュ簱鍜屽彲鎵ц紼嬪簭錛屽寘鎷嚜宸辯殑浜у嚭鍜岀涓夋柟搴擄紝鎸夌紪璇戦厤緗悕縐板寘鎷搴旂殑瀛愮洰褰曪紝濡侱ebug銆丷elease銆傚彟澶栵紝紼嬪簭榪愯榪囩▼涓渶瑕佸閮ㄧ殑鏁版嵁鏂囦歡鍜屽惎鍔ㄦ椂闇瑕佺殑閰嶇疆鏂囦歡絳夌瓑閮藉彲鏀句簬璇ョ洰褰?/p> <p>3. MySDK瀛樻斁<strong>浜у搧欏圭洰渚濊禆銆佷駭鍑?/strong>鐨?h鏂囦歡鍜?lib鏂囦歡銆傚叾涓璍ib鐩綍涓嬫牴鎹厤緗悕縐板拰絎笁鏂瑰簱鍚嶇О瀵筶ib鏂囦歡榪涜綆$悊銆傚鏌愰」鐩嬌鐢˙CG浣滀負鐣岄潰搴擄紝鍒橞CG鐨勫ご鏂囦歡鏀劇疆浜?#8220;Include\BCG”涓嬶紝涓嶅悓鐗堟湰鐨勫簱鏂囦歡緗簬“Lib\閰嶇疆鍚峔BCG”涓嬶紱欏圭洰杈撳嚭鐨刲ib鏂囦歡鐩存帴浣嶄簬“Lib\閰嶇疆鍚?#8221;涓嬨傝繖鏍蜂駭鍝佷緷璧栫殑涓嶅悓寮鍙戝簱鎵浣跨敤澶存枃浠朵笌搴撴枃浠跺拰杈撳嚭鐨勫ご鏂囦歡涓庡簱鏂囦歡鐩鎬簰涔嬮棿鏄嫭绔嬨佸郊姝や笉騫叉秹鐨勩?/p> <p>4. Project鏄伐紼嬬洰褰曪紝鐢ㄤ簬瀛樻斁浠g爜錛屾寜妯″潡鍚嶇粍緇囨綰х洰褰曘傚姛鑳藉簱宸ョ▼涓鑸殑浠?#8220;Lib”寮澶達紝浠ヤ究涓庡叾瀹冨姩鎬佸簱鍖哄埆銆傛瘡涓伐紼嬫ā鍧楃洰褰曞簲鍖呭惈“Document”瀛愮洰褰曪紝璇ョ洰褰曚笅鎸夐渶瑕佸鍔?#8220;DBM”銆?#8220;DOC”銆?#8220;UML”涓変釜瀛愮洰褰曘?#8220;DBM”鐢ㄤ簬瀛樻斁涓庤妯″潡鐩稿叧鐨勬暟鎹簱璁捐鏂囨。錛岄氬父鏄疨owerDesigner鏂囨。錛?#8220;DOC”鐢ㄤ簬瀛樻斁涓庤妯″潡鐩稿叧鐨勪竴鑸ц鏄庢枃妗o紱“UML”鐢ㄤ簬瀛樻斁涓庤妯″潡鐩稿叧鐨刄ML璁捐鏂囨。錛岄氬父鏄疪ational Rose鏂囨。銆?/p> <p>5. Solution鏄В鍐蟲柟妗堢洰褰曪紝鐢ㄤ簬瀛樻斁浜у搧鐨勫畬鏁磋В鍐蟲柟妗堛傞氬父浣跨敤瑙e喅鏂規鍙互鐢熸垚璇ヤ駭鍝佺殑鎵鏈夌増鏈?/p> <p>6. Temp鏄敤浜庣紪璇戠敓鎴愮殑涓棿鐩綍錛屼富瑕佸瓨鏀劇紪璇戣繃紼嬩腑鐢熸垚鐨勫悇縐嶄腑闂存枃浠躲?/p> <h3><a name=_Toc282612784><font color=#1d58d1>3.宸ョ▼閰嶇疆</font></a></h3> <p>鏍規嵁璋冭瘯淇℃伅涓庡瓧絎﹂泦鐨勪笉鍚岋紝涓鑸殑宸ョ▼閰嶇疆鏈夊叚綾伙紝濡備笅琛ㄦ墍紺? <table border=1 cellSpacing=0 cellPadding=0> <tbody> <tr> <td vAlign=top width=145> <p>鍚嶇О</p> </td> <td vAlign=top width=145> <p>瀛楃闆?/p> </td> <td vAlign=top width=145> <p>鏄惁鍖呭惈璋冭瘯淇℃伅</p> </td> <td vAlign=top width=145> <p>鏄惁鍖呭惈浠g爜浼樺寲</p> </td> </tr> <tr> <td vAlign=top width=145> <p>Debug</p> </td> <td vAlign=top width=145> <p>ANSI</p> </td> <td vAlign=top width=145> <p>YES</p> </td> <td vAlign=top width=145> <p>NO</p> </td> </tr> <tr> <td vAlign=top width=145> <p>Release</p> </td> <td vAlign=top width=145> <p>ANSI</p> </td> <td vAlign=top width=145> <p>YES</p> </td> <td vAlign=top width=145> <p>YES</p> </td> </tr> <tr> <td vAlign=top width=145> <p>Program</p> </td> <td vAlign=top width=145> <p>ANSI</p> </td> <td vAlign=top width=145> <p>NO</p> </td> <td vAlign=top width=145> <p>YES</p> </td> </tr> <tr> <td vAlign=top width=145> <p>UnicodeDebug</p> </td> <td vAlign=top width=145> <p>UNICODE</p> </td> <td vAlign=top width=145> <p>YES</p> </td> <td vAlign=top width=145> <p>NO </p> </td> </tr> <tr> <td vAlign=top width=145> <p>UnicodeRelease</p> </td> <td vAlign=top width=145> <p>UNICODE</p> </td> <td vAlign=top width=145> <p>YES</p> </td> <td vAlign=top width=145> <p>YES</p> </td> </tr> <tr> <td vAlign=top width=145> <p>UnicodeProgram</p> </td> <td vAlign=top width=145> <p>UNICODE</p> </td> <td vAlign=top width=145> <p>NO</p> </td> <td vAlign=top width=145> <p>YES</p> </td> </tr> </tbody> </table> </p> <h3><a name=_Toc282612785><font color=#1d58d1>4.灞炴ч厤緗?/font></a></h3> <h4><a name=_Toc282612786><font color=#1d58d1>4.1.“甯歌”閰嶇疆</font></a></h4> <p>杈撳嚭鐩綍錛?..\..\Temp\Link\$(ProjectName)\$(ConfigurationName)</p> <p>涓棿鐩綍錛?.\..\Temp\Compile\$(ProjectName)\$(ConfigurationName)</p> <h4><a name=_Toc282612787><font color=#1d58d1>4.2.“璋冭瘯”閰嶇疆</font></a></h4> <p>濡傛灉闇瑕佸惎鍔ㄦ湰妯″潡榪涜璋冭瘯錛屽垯“鍛戒護”涓猴細..\..\Bin\$(ConfigurationName)\$(TargetFileName)</p> <h4><a name=_Toc282612788><font color=#1d58d1>4.3.“C/C++”閰嶇疆</font></a></h4> <p>1) “闄勫姞鍖呭惈鐩綍”錛?.\..\MineSDK\Include 錛屽鏈夊叾瀹冪洰褰曡鐢?#8220;;”闂撮殧錛屾敞鎰忎嬌鐢ㄧ浉瀵硅礬寰勶紝<strong><font color=#ff0000>涓ョ浣跨敤緇濆璺緞</font>銆?/strong></p> <p>2) 鍔ㄦ佸簱浣跨敤瀵煎嚭瀹忓鍑?瀵煎叆鏃訛紝搴斿湪“棰勫鐞嗗櫒”涓畾涔夊鍑哄畯錛屼笉寰楀湪浠g爜鏂囦歡涓畾涔夈傚鍑哄畯鐨勪竴鑸牸寮忎負“LIB_XXXXX”銆?/p> <p>3) 涓鑸儏鍐典笅涓嶆帹鑽愪嬌鐢ㄩ緙栬瘧澶淬?/p> <h4><a name=_Toc282612789><font color=#1d58d1>4.4.“閾炬帴鍣?#8221;閰嶇疆</font></a></h4> <p>1) “杈撳嚭鏂囦歡”錛?/p> <p>a) 鑻ヤ負Debug鐗堟椂錛?(OutDir)\$(ProjectName)D.dll錛?/p> <p>b) 鑻ヤ負Release鐗堟椂錛?(OutDir)\$(ProjectName).dll銆?/p> <p>2) “闄勫姞搴撶洰褰?#8221;錛?.\..\Bin\$(ConfigurationName);..\..\MySDK\Lib錛屽鏈夊叾瀹冪洰褰曡鐢?#8220;;”闂撮殧錛屾敞鎰忎嬌鐢ㄧ浉瀵硅礬寰勶紝涓ユ牸紱佹浣跨敤鏈湴緇濆璺緞銆?/p> <p>3) “妯″潡瀹氫箟鏂囦歡”錛氫竴鑸笉浣跨敤妯″潡瀹氫箟.def鏂囦歡錛屾湰欏瑰彲閫夋嫨“浠庨粯璁ら厤緗?#8230;”銆?/p> <h4><a name=_Toc282612790><font color=#1d58d1>4.5.“鐢熸垚浜嬩歡”閰嶇疆</font></a></h4> <p>涓鑸渶瑕侀厤緗殑鏄?#8220;鐢熸垚鍚庝簨浠?#8221;銆備換浣曚竴涓伐紼嬫ā鍧楃殑鐢熸垚鍚庝簨浠墮兘搴斿寘鎷互涓嬪唴瀹癸細</p> <p>1) copy $(TargetPath) ..\..\Bin\$(ConfigurationName)</p> <p>2) 鑻ユ湁瀵煎嚭鐨凩ib搴撴枃浠訛紝闇瑕佸鍔狅細copy $(TargetDir)$(TargetName).lib ..\..\MySDK\Lib</p> <p>3) 鑻ユ湁瀵煎嚭鐨勫ご鏂囦歡錛岄渶瑕佸鍔狅細 copy myhead.h ..\..\MySDK\Include </p> <p>鍏蜂綋鏂囦歡鍚嶄笌璺緞瑙嗘儏鍐佃屽畾錛屼絾鏄弗紱佷嬌鐢ㄧ粷瀵硅礬寰勩?/p> <h3><a name=_Toc282612791><font color=#1d58d1>5.闄勫綍錛歏C2005</font></a>涓彲浠ヤ嬌鐢ㄧ殑瀹?/h3> <table border=1 cellSpacing=0 cellPadding=0> <tbody> <tr> <td vAlign=top width=163> <p>ConfigurationName</p> </td> <td vAlign=top width=405> <p>閰嶇疆鍚嶅瓧錛岄氬父鏄疍ebug鎴栬匯elease</p> </td> </tr> <tr> <td vAlign=top width=163> <p>IntDir</p> </td> <td vAlign=top width=405> <p>緙栬瘧鍣ㄤ嬌鐢ㄧ殑涓棿鐩綍錛屼駭鍑簅bj鏂囦歡</p> </td> </tr> <tr> <td vAlign=top width=163> <p>OutDir</p> </td> <td vAlign=top width=405> <p>閾炬帴鍣ㄤ嬌鐢ㄧ殑杈撳嚭鐩綍</p> </td> </tr> <tr> <td vAlign=top width=163> <p>ProjectDir</p> </td> <td vAlign=top width=405> <p>欏圭洰鐩綍</p> </td> </tr> <tr> <td vAlign=top width=163> <p>ProjectName</p> </td> <td vAlign=top width=405> <p>欏圭洰鍚嶅瓧</p> </td> </tr> <tr> <td vAlign=top width=163> <p>SolutionDir</p> </td> <td vAlign=top width=405> <p>瑙e喅鏂規鐩綍</p> </td> </tr> <tr> <td vAlign=top width=163> <p>TargetDir</p> </td> <td vAlign=top width=405> <p>鐩爣杈撳嚭鏂囦歡鎵鍦ㄧ殑鐩綍</p> </td> </tr> <tr> <td vAlign=top width=163> <p>TargetExt</p> </td> <td vAlign=top width=405> <p>鐩爣杈撳嚭鐨勬墿灞曞悕</p> </td> </tr> <tr> <td vAlign=top width=163> <p>TargetFileName</p> </td> <td vAlign=top width=405> <p>鐩爣杈撳嚭鏂囦歡鍚嶏紝鍖呮嫭鎵╁睍鍚?/p> </td> </tr> <tr> <td vAlign=top width=163> <p>TargetName</p> </td> <td vAlign=top width=405> <p>鐩爣杈撳嚭鍚嶏紝涓嶅寘鎷墿灞曞悕</p> </td> </tr> <tr> <td vAlign=top width=163> <p>TargetPath</p> </td> <td vAlign=top width=405> <p>鐩爣杈撳嚭鏂囦歡鐨勫叏璺緞鍚?/p> </td> </tr> </tbody> </table> </div> <p class=postfoot>posted on 2011-04-03 18:58 <a href="http://m.shnenglu.com/phoenix8848cn/"><font color=#223355>瑗塊棬鏈夋倲</font></a> 闃呰(352) <a href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#Post"><font color=#223355>璇勮(4)</font></a>  <a href="http://m.shnenglu.com/phoenix8848cn/admin/EditPosts.aspx?postid=143354"><font color=#223355>緙栬緫</font></a> <a href="http://m.shnenglu.com/phoenix8848cn/AddToFavorite.aspx?id=143354"><font color=#223355>鏀惰棌</font></a> <a href="http://m.shnenglu.com/phoenix8848cn/services/trackbacks/143354.aspx"><font color=#223355>寮曠敤</font></a> </p> </div> <img src="http://m.shnenglu.com/phoenix8848cn/aggbug/143354.html?webview=1" width=1 height=1> <!-- <rdf:rdf xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> <rdf:description rdf:about="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html" dc:identifier="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html" dc:title="杞歡宸ョ▼閰嶇疆瑙勮寖錛圴C2005錛?絎簩鐗? trackback:ping="http://m.shnenglu.com/phoenix8848cn/services/trackbacks/143354.aspx" /> </rdf:rdf> --><script type=text/javascript> //<![cdata[ Sys.WebForms.PageRequestManager._initialize('AjaxHolder$scriptmanager1', document.getElementById('Form1')); Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tAjaxHolder$UpdatePanel1'], [], [], 90); //]]> </script> <div class="hvzpftn" id=AjaxHolder_UpdatePanel1><a name=pagedcomment></a><a name=璇勮> <div class="hvzpftn" id=comments> <h3>璇勮</h3> <div id="hvzpftn" class=post> <h2><a title="permalink: re: 杞歡宸ョ▼閰嶇疆瑙勮寖錛圴C2005錛?絎簩鐗? href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#143360">#</a><font color=#000000> </font><a name=143360></a><font color=#000000>re: 杞歡宸ョ▼閰嶇疆瑙勮寖錛圴C2005錛?絎簩鐗?nbsp; </font><a onclick='return SetReplyAuhor("寰$敤杞歡")' href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#post">鍥炲</a><font color=#000000>  </font><a title=鏌ョ湅璇ヤ綔鑰呭彂琛ㄨ繃鐨勮瘎璁?href="http://m.shnenglu.com/comment?author=%e5%be%a1%e7%94%a8%e8%bd%af%e4%bb%b6" target=_blank>鏇村璇勮</a><font color=#000000> </font><a id=AjaxHolder_Comments_CommentList_ctl00_DeleteLink href="javascript:__doPostBack('AjaxHolder$Comments$CommentList$ctl00$DeleteLink','')"></a><font color=#000000>  </font><a id=AjaxHolder_Comments_CommentList_ctl00_EditLink></a><font color=#000000> </font></h2> 甯屾湜鍙互鏀懼嚭pdf鐗堬紝榪欐牱鏂逛究浣跨敤…… <div id="hvzpftn" class=postfoot>2011-04-03 20:19 | <a id=AjaxHolder_Comments_CommentList_ctl00_NameLink target=_blank><font color=#223355>寰$敤杞歡</font></a> </div> </div> <div id="hvzpftn" class=post> <h2><a title="permalink: re: 杞歡宸ョ▼閰嶇疆瑙勮寖錛圴C2005錛?絎簩鐗? href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#143370"><font color=#223355>#</font></a> <a name=143370></a>re: 杞歡宸ョ▼閰嶇疆瑙勮寖錛圴C2005錛?絎簩鐗?nbsp; <a onclick='return SetReplyAuhor("婧祦")' href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#post"><font color=#223355>鍥炲</font></a>  <a title=鏌ョ湅璇ヤ綔鑰呭彂琛ㄨ繃鐨勮瘎璁?href="http://m.shnenglu.com/comment?author=%e6%ba%aa%e6%b5%81" target=_blank><font color=#223355>鏇村璇勮</font></a> <a id=AjaxHolder_Comments_CommentList_ctl01_DeleteLink href="javascript:__doPostBack('AjaxHolder$Comments$CommentList$ctl01$DeleteLink','')"></a>  <a id=AjaxHolder_Comments_CommentList_ctl01_EditLink></a> </h2> 涓漢闈炲父璁ㄥ帉浠涔?bin錛宻ource錛宻olution錛屻傘傘?<br>浣犺涔堝氨綰補鑷繁鎼烇紝bin銆乻ource 閮藉彲浠ワ紝灝卞埆 solution銆乸roject 浜嗭紝鏈鍚庤嚜宸卞啓鑴氭湰 <br>瑕佷箞灝辯敤 solution銆乸roject錛岀洰褰曞氨澶т綋涓婃寜榛樿鐨勶紝涓涓猵roject涓涓洰褰曪紝 <br>鏃㈢敤 solution銆乸roject錛屽張鐙珛鎼炰竴濂楃洰褰曚綋緋伙紝鐒跺悗淇敼涓澶у爢綰補鍏充簬鐩綍鐨勯厤緗弬鏁幫紝浣曞繀鍛? <div id="hvzpftn" class=postfoot>2011-04-03 21:52 | <a id=AjaxHolder_Comments_CommentList_ctl01_NameLink href="http://m.shnenglu.com/Streamlet/" target=_blank><font color=#223355>婧祦</font></a> </div> </div> <div id="hvzpftn" class=post> <h2><a title="permalink: re: 杞歡宸ョ▼閰嶇疆瑙勮寖錛圴C2005錛?絎簩鐗? href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#143376"><font color=#223355>#</font></a> <a name=143376></a>re: 杞歡宸ョ▼閰嶇疆瑙勮寖錛圴C2005錛?絎簩鐗?nbsp; <a onclick='return SetReplyAuhor("瑗塊棬鏈夋倲")' href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#post"><font color=#223355>鍥炲</font></a>  <a title=鏌ョ湅璇ヤ綔鑰呭彂琛ㄨ繃鐨勮瘎璁?href="http://m.shnenglu.com/comment?author=%e8%a5%bf%e9%97%a8%e6%9c%89%e6%82%94" target=_blank><font color=#223355>鏇村璇勮</font></a> <a id=AjaxHolder_Comments_CommentList_ctl02_DeleteLink href="javascript:__doPostBack('AjaxHolder$Comments$CommentList$ctl02$DeleteLink','')"></a>  <a id=AjaxHolder_Comments_CommentList_ctl02_EditLink></a> </h2> @婧祦<br>1.Bin閲屾槸鎵鏈夌敓鎴愮殑鏂囦歡錛屽寘鍚簡紼嬪簭鍙互榪愯鐨勬渶灝忚祫婧愶紝浜у搧鍙戝竷浜哄憳鍙渶瑕佸皢Bin閲岀殑鏂囦歡鎵撳寘灝卞彲浠ョ敓鎴愬畨瑁呮枃浠躲傝岄粯璁ょ殑閰嶇疆浼氬湪bin鐩綍閲岀敓鎴愮▼搴忚皟璇曟暟鎹簱絳変竴浜涢潪榪愯鏃墮渶瑕佺殑鏂囦歡銆侭in鏄潰鍚戜駭鍝佹祴璇曚笌鍙戝竷浜哄憳鐨勶紝寮鍙戜漢鍛樺彧鏄皢dll鍜宔xe杈撳嚭鍒癰in涓繘琛岃皟璇曘傝繖鏍蜂嬌浜у搧寮鍙戜笌浜у搧嫻嬭瘯銆佸彂甯冨垎寮銆?br>2.Project涓嶴olution鍒嗗紑鏄洜涓烘瘡涓垚鍛橀兘鏄嫭绔嬪湴寮鍙戜竴涓垨鍑犱釜Project鐨勶紝浠栨妸Bin涓嶴DK浠嶴VN涓奵heckout鍑烘潵錛屽氨鍙互榪涜鑷繁鐨勪唬鐮佺紪鍐欙紝鑰屼笉蹇呭叧蹇冧笌鍏朵粬寮鍙戜漢鍛樻墍鍚屾椂榪涜鐨刾roject鐨勪緷璧栧叧緋匯係olution閲屽寘鍚殑鏄暣涓駭鍝佺殑鎵鏈塸roject浠ュ強project涔嬮棿鐨勪緷璧栧叧緋匯傛墦寮solution灝卞彲浠ョ敓鎴愪竴涓畬鏁寸殑浜у搧鍒癰in閲岋紝鑰屼笖bin閲屾病鏈変換浣曞浣欑殑鏂囦歡銆?br><br>鏁堟灉錛氶噰鐢ㄤ簡榪欏宸ョ▼閰嶇疆鏂規硶錛屾暣涓洟闃熶唬鐮佷笌宸ョ▼灞傞潰鐨勪氦嫻佹槑鏄鵑『鐣呭浜嗭紝鍐嶄篃娌℃湁鍑虹幇鎷垮埌鍒漢鐨勫伐紼嬪崐澶゜uild涓嶈繃鐨勯棶棰樸傝屼笖寮鍙戜笌嫻嬭瘯銆佸彂甯冧箣闂寸殑鍗告帴涔熷緢欏哄埄銆傚紑鍙戜漢鍛樻瘡澶╅兘build鍚巆ommit鍒皊vn銆傛瘡鍛ㄤ竴寮鍙戦儴浜у搧綆$悊鍛樼敤solution鐢熸垚涓涓畬鎴愮殑bin騫舵暣鐞嗗嚭track鍚庡彂甯冨埌Svn涓婏紝嫻嬭瘯浜哄憳鐢ㄦ湰鍛ㄤ竴鐨刡in榪涜嫻嬭瘯錛屽埌浜員ag鐨勬椂闂寸偣嫻嬭瘯閮ㄤ駭鍝佺鐞嗗憳灝哹in鎵撳寘鎴愬畨瑁呯▼搴忓彂甯冨埌svn涓婂茍閫氱煡瀹炴柦閮ㄩ棬鏈夋洿鏂扮増鏈傚艦鎴愪竴涓畬鏁寸殑嫻佺▼銆傚啀鐢╞ugzilla涓巇otproject瀵逛駭鍝佺殑bug鍜屼漢鍛樿繘琛岀鐞嗐?br><br>鎬葷粨錛氳繖濂楀伐紼嬮厤緗簲璇ョ畻鏄笉渚濊禆浜庣涓夋柟宸ュ叿錛岃繘琛屽熀浜嶴vn鐨勪唬鐮佺鐞嗕互鍙婂涓紑鍙戜漢鍛樹箣闂寸殑鍚堜綔寮鍙戙傚鏋滄槸涓涓漢錛屾垨鑰卲roject涓嶅鐨勬椂鍊欏氨娌″繀瑕佸姝ゅ鏉傘傝屼笖淇敼宸ョ▼閰嶇疆鏄竴嬈$殑錛屼笉闇瑕佹瘡嬈¢兘淇敼銆傚彲浠ヨ涓鍔蟲案閫搞?br><br>璋㈣阿浣犵殑璇勮銆?br> <div id="hvzpftn" class=postfoot>2011-04-04 00:43 | <a id=AjaxHolder_Comments_CommentList_ctl02_NameLink href="http://m.shnenglu.com/phoenix8848cn/" target=_blank><font color=#223355>瑗塊棬鏈夋倲</font></a> </div> </div> <div id="hvzpftn" class=post> <h2><a title="permalink: re: 杞歡宸ョ▼閰嶇疆瑙勮寖錛圴C2005錛?絎簩鐗? href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#143387"><font color=#223355>#</font></a> <a name=143387></a>re: 杞歡宸ョ▼閰嶇疆瑙勮寖錛圴C2005錛?絎簩鐗?a name=Post></a>  <a onclick='return SetReplyAuhor("婧祦")' href="http://m.shnenglu.com/phoenix8848cn/archive/2011/04/03/143354.html#post"><font color=#223355>鍥炲</font></a>  <a title=鏌ョ湅璇ヤ綔鑰呭彂琛ㄨ繃鐨勮瘎璁?href="http://m.shnenglu.com/comment?author=%e6%ba%aa%e6%b5%81" target=_blank><font color=#223355>鏇村璇勮</font></a> <a id=AjaxHolder_Comments_CommentList_ctl03_DeleteLink href="javascript:__doPostBack('AjaxHolder$Comments$CommentList$ctl03$DeleteLink','')"></a>  <a id=AjaxHolder_Comments_CommentList_ctl03_EditLink></a> </h2> 1銆佹墦鍖呬漢鍛樹笉璇ュ伔鎳掞紝浠栦滑搴旇鐭ラ亾瀹屾暣鐨勭簿紜殑鏂囦歡娓呭崟錛岃屼笉浠呬粎鏄?#8220;鏌愪釜鐩綍涓嬬殑鎵鏈夋枃浠?#8221; <br>2銆佽繕鏄病鏈夌湅鍑烘潵鎶妔olution鍗曠嫭钘忓湪涓涓洰褰曠殑鐢ㄦ剰銆?</div> </div> </div> <img src ="http://m.shnenglu.com/Walker/aggbug/143403.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Walker/" target="_blank">婕鑰吤?鈥︹?錕?/a> 2011-04-04 15:46 <a href="http://m.shnenglu.com/Walker/articles/143403.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>錛堣漿錛塛in7 UAC鐨勫畨鍏ㄣ佸吋瀹瑰強鏉冮檺 http://m.shnenglu.com/Walker/articles/141814.html婕鑰吤?amp;鈥︹?錕?/dc:creator>婕鑰吤?amp;鈥︹?錕?/author>Mon, 14 Mar 2011 12:58:00 GMThttp://m.shnenglu.com/Walker/articles/141814.html

1銆乄in7 UAC鐨勫畨鍏ㄣ佸吋瀹瑰強鏉冮檺

Posted on 2010-11-24 22:42 edwardlewiswe 闃呰(401) 璇勮(0) 緙栬緫 鏀惰棌

緗戜笂鍏充簬榪欎釜闂璁ㄨ杈冨錛屼絾涔熶笉澶栦箮鍑犵鏂規硶銆傛葷粨涓涓嬶紝濡傞檮涓傞『渚夸簡瑙d竴涓猆AC銆?/span> 

UAC錛屽叏縐癠ser Account Control錛堢敤鎴峰笎鎴鋒帶鍒訛級 

System Safe Monitor錛堜富鏈哄叆渚甸槻寰$郴緇燂級

UAC鏄浣曞伐浣滅殑[3]

鎴戜滑鍙互綆鍗曠殑鎶奤AC褰撲綔鏉冮檺涓存椂閲嶅垎閰嶇殑宸ュ叿銆傚湪榛樿鎯呭喌涓嬶紝鎵鏈夌殑闈炵郴緇熸牳蹇冭繘紼嬮兘鍙嫢鏈夋爣鍑嗘潈闄愶紝榪欎竴鏉冮檺涓嶈兘瀵圭郴緇熷叧閿尯鍩熻繘琛屼慨鏀廣傚浜庝竴涓▼搴忥紝濡傛灉瀹冨綋涓惈鏈夋彁鏉冪敵璇鳳紝鍒欏湪榪愯鏃朵細寮瑰嚭UAC紿楀彛瑕佹眰鎻愭潈銆傚鏋滅敤鎴峰厑璁革紝鍒欑▼搴忔殏鏃舵х殑鑾峰緱浜嗘渶楂樻潈闄愶紝鍙互瀵圭郴緇熷叧閿尯鍩熻繘琛屾洿鏀癸紱濡傛灉鐢ㄦ埛鎷掔粷錛屽垯紼嬪簭琚嫆緇濇墽琛屻傝屽鏋滅▼搴忎腑娌℃湁鎻愭潈鐢寵錛屽垯緋葷粺浼氳紼嬪簭榪愯浜庢爣鍑嗘潈闄愪笅銆傚悓鏃訛紝瀵逛簬鎵鏈夌▼搴忥紝閮藉彲浠ョ敤“浠ョ鐞嗗憳韜喚榪愯”鐨勬柟寮忔墜鍔ㄦ彁鏉冦傝屽嵆渚跨梾姣掓劅鏌撲簡緋葷粺錛屽畠涔熷浜嶶AC鐨勭洃瑙嗕箣涓嬶紝榪欎嬌寰楃梾姣掔殑鍙嶆竻闄よ涓轟細鍙楀埌寰堝ぇ闃葷銆傛鏄嚟鍊熻繖涓鏈哄埗錛孶AC鎴愪負浜嗕竴閬撻噸瑕佺殑緋葷粺闃茬伀澧欍?/span>

鍦?Windows7錛圢T6.x緋葷粺錛変腑錛岀郴緇熷彇娑堜簡瀵圭Щ鍔ㄨ澶嘇utorun.inf鐨勬敮鎸?/span>銆?/span>

鐢ㄦ埛鐣岄潰鐗規潈闅旂[5]

鍦ㄦ棭鏈熺殑Windows鎿嶄綔緋葷粺涓紝鍦ㄥ悓涓鐢ㄦ埛涓嬭繍琛岀殑鎵鏈夎繘紼嬫湁鐫鐩稿悓鐨勫畨鍏ㄧ瓑綰э紝鎷ユ湁鐩稿悓鐨勬潈闄愩備緥濡傦紝涓涓繘紼嬪彲浠ヨ嚜鐢卞湴鍙戦佷竴涓猈indows娑堟伅鍒板彟澶栦竴涓繘紼嬬殑紿楀彛銆備粠Windows Vista寮濮嬶紝褰撶劧涔熷寘鎷琖indows 7錛屽浜庢煇浜沇indows娑堟伅錛岃繖涓鏂瑰紡鍐嶄篃琛屼笉閫氫簡銆傝繘紼?鎴栬呭叾浠栫殑瀵硅薄)寮濮嬫嫢鏈変竴涓柊鐨勫睘鎬р斺旂壒鏉冪瓑綰?Privilege Level)銆備竴涓壒鏉冪瓑綰ц緝浣庣殑榪涚▼涓嶅啀鍙互鍚戜竴涓壒鏉冪瓑綰ц緝楂樼殑榪涚▼鍙戦佹秷鎭紝铏界劧浠栦滑鍦ㄧ浉鍚岀殑鐢ㄦ埛鏉冮檺涓嬭繍琛屻傝繖灝辨槸鎵璋撶殑鐢ㄦ埛鐣岄潰鐗規潈闅旂 (User Interface Privilege Isolation錛孶IPI)銆?/span>

UIPI鐨勫紩鍏ワ紝鏈澶х殑鐩殑鏄槻姝㈡伓鎰忎唬鐮佸彂閫佹秷鎭粰閭d簺鎷ユ湁杈冮珮鏉冮檺鐨勭獥鍙d互瀵瑰叾榪涜鏀誨嚮錛屼粠鑰岃幏鍙栬緝楂樼殑鏉冮檺絳夌瓑銆?/span>

UIPI鐨勮繍琛屾満鍒?/span>

鍦╓indows 7涓紝褰揢AC(User Account Control)鍚敤鐨勬椂鍊欙紝UIPI鐨勮繍琛屽彲浠ュ緱鍒版渶鏄庢樉鐨勪綋鐜般傚湪UAC涓紝褰撲竴涓鐞嗗憳鐢ㄦ埛鐧誨綍緋葷粺鍚庯紝鎿嶄綔緋葷粺浼氬垱寤轟袱涓護鐗屽璞?Token Object)錛氱涓涓槸綆$悊鍛樹護鐗岋紝鎷ユ湁澶у鏁扮壒鏉?綾諱技浜嶹indows Vista涔嬪墠鐨凷ystem涓殑鐢ㄦ埛)錛岃岀浜屼釜鏄竴涓粡榪囪繃婊ゅ悗鐨勭畝鍖栫増鏈紝鍙嫢鏈夋櫘閫氱敤鎴風殑鏉冮檺銆?/span>

榛樿鎯呭喌涓嬶紝浠ユ櫘閫氱敤鎴鋒潈闄愬惎鍔ㄧ殑榪涚▼鎷ユ湁鏅氱壒鏉冪瓑綰?UIPI鐨勭瓑綰у垝鍒嗕負浣庣瓑綰?low)錛屾櫘閫?normal)錛岄珮絳夌駭(high)錛岀郴緇?(system))銆傚悓鏍風殑錛屼互綆$悊鍛樻潈闄愯繍琛岀殑榪涚▼錛屼緥濡傦紝鐢ㄦ埛鍙抽敭鍗曞嚮閫夋嫨“浠ョ鐞嗗憳韜喚榪愯”鎴栬呮槸閫氳繃娣誨姞“runas”鍙傛暟璋冪敤 ShellExecute榪愯鐨勮繘紼嬶紝榪欐牱鐨勮繘紼嬪氨鐩稿簲鍦版嫢鏈変竴涓緝楂?high)鐨勭壒鏉冪瓑綰с?/span>

榪欏皢瀵艱嚧緋葷粺浼氳繍琛屼袱縐嶄笉鍚岀被鍨嬶紝涓嶅悓鐗規潈絳夌駭鐨勮繘紼?褰撶劧錛屼粠鎶鏈笂璁茶繖涓や釜榪涚▼閮芥槸鍦ㄥ悓涓鐢ㄦ埛涓?銆傛垜浠彲浠ヤ嬌鐢╓indows Sysinternals宸ュ叿闆嗕腑鐨勮繘紼嬫祻瑙堝櫒(Process Explorer)鏌ョ湅鍚勪釜榪涚▼鐨勭壒鏉冪瓑綰с俒6]

鎵浠ワ紝褰撲綘鍙戠幇浣犵殑榪涚▼涔嬮棿Windows娑堟伅閫氫俊鍙戠敓闂鏃訛紝涓嶅Θ浣跨敤榪涚▼嫻忚鍣ㄦ煡鐪嬩竴涓嬩袱涓繘紼嬩箣闂存槸鍚︽湁鍚堥傜殑鐗規潈絳夌駭銆?/span>

UIPI鎵甯︽潵鐨勯檺鍒?/span>

姝e鎴戜滑鍓嶆枃鎵璇達紝絳夌駭鐨勫垝鍒嗭紝鏄負浜嗛槻姝互涓嬬姱涓娿傛墍浠ワ紝鏈変簡鐢ㄦ埛鐣岄潰鐗規潈闅旂錛屼竴涓繍琛屽湪杈冧綆鐗規潈絳夌駭鐨勫簲鐢ㄧ▼搴忕殑琛屼負灝卞彈鍒頒簡璇稿闄愬埗錛屽畠涓嶅彲浠ワ細

鈻?/span>楠岃瘉鐢辮緝楂樼壒鏉冪瓑綰ц繘紼嬪垱寤虹殑紿楀彛鍙ユ焺

鈻?/span>閫氳繃璋冪敤SendMessage鍜孭ostMessage鍚戠敱杈冮珮鐗規潈絳夌駭榪涚▼鍒涘緩鐨勭獥鍙?/span>鈻?/span>鍙戦乄indows娑堟伅

鈻?/span>浣跨敤綰跨▼閽╁瓙澶勭悊杈冮珮鐗規潈絳夌駭榪涚▼

鈻?/span>浣跨敤鏅氶挬瀛?SetWindowsHookEx)鐩戣杈冮珮鐗規潈絳夌駭榪涚▼

鈻?/span>鍚戜竴涓緝楂樼壒鏉冪瓑綰ц繘紼嬫墽琛孌LL娉ㄥ叆

浣嗘槸錛屼竴浜涚壒孌奧indows娑堟伅鏄璁哥殑銆傚洜涓鴻繖浜涙秷鎭榪涚▼鐨勫畨鍏ㄦф病鏈夊お澶у獎鍝嶃傝繖浜沇indows娑堟伅鍖呮嫭錛?/span>

0x000 - WM_NULL

0x003 - WM_MOVE

0x005 - WM_SIZE

0x00D - WM_GETTEXT

0x00E - WM_GETTEXTLENGTH

0x033 - WM_GETHOTKEY

0x07F - WM_GETICON

0x305 - WM_RENDERFORMAT

0x308 - WM_DRAWCLIPBOARD

0x30D - WM_CHANGECBCHAIN

0x31A - WM_THEMECHANGED

0x313, 0x31B (WM_???)

淇UIPI闂

鍩轟簬Windows Vista涔嬪墠鐨勬搷浣滅郴緇熻涓烘墍璁捐鐨勫簲鐢ㄧ▼搴忥紝鍙兘甯屾湜Windows娑堟伅鑳藉鍦ㄨ繘紼嬩箣闂磋嚜鐢辯殑浼犻掞紝浠ュ畬鎴愪竴浜涚壒孌婄殑宸ヤ綔銆傚綋榪欎簺搴旂敤紼嬪簭鍦?Windows 7涓婅繍琛屾椂錛屽洜涓篣IPI鏈哄埗錛岃繖縐嶆秷鎭紶閫掕闃繪柇浜嗭紝搴旂敤紼嬪簭灝變細閬囧埌鍏煎鎬ч棶棰樸備負浜嗚В鍐寵繖涓棶棰橈紝Windows Vista寮曞叆浜嗕竴涓柊鐨凙PI鍑芥暟ChangeWindowMessageFilter[7]銆傚埄鐢ㄨ繖涓嚱鏁幫紝鎴戜滑鍙互娣誨姞鎴栬呭垹闄よ兘澶熼氳繃鐗規潈絳夌駭闅旂鐨?Windows娑堟伅銆傝繖灝卞儚鎷ユ湁杈冮珮鐗規潈絳夌駭鐨勮繘紼嬶紝璁劇疆浜嗕竴涓繃婊ゅ櫒錛屽厑璁擱氳繃鐨刉indows娑堟伅閮借娣誨姞鍒拌繖涓繃婊ゅ櫒鐨勭櫧鍚嶅崟錛屽彧鏈夊湪榪欎釜鐧藉悕鍗曚笂鐨勬秷鎭墠鍏佽浼犻掕繘鏉ャ?/span>

濡傛灉鎴戜滑鎯沖璁鎬竴涓秷鎭彲浠ュ彂閫佺粰杈冮珮鐗規潈絳夌駭鐨勮繘紼嬶紝鎴戜滑鍙互鍦ㄨ緝楂樼壒鏉冪瓑綰х殑榪涚▼涓皟鐢–hangeWindowMessageFilter鍑芥暟錛屼互 MSGFLT_ADD浣滀負鍙傛暟灝嗘秷鎭坊鍔犺繘娑堟伅榪囨護鍣ㄧ殑鐧藉悕鍗曘傚悓鏍風殑錛屾垜浠篃鍙互浠SGFLT_REMOVE浣滀負鍙傛暟灝嗚繖涓秷鎭粠鐧藉悕鍗曚腑鍒犻櫎銆?/span>

涓涓ず渚?/span>

瀵逛簬緋葷粺娑堟伅鐨勫鐞嗭紝鎺ュ彈娑堟伅鐨勮繘紼嬮渶瑕佸皢璇ユ秷鎭姞鍏ュ埌鐧藉悕鍗曚腑錛屽彲浠ラ氳繃涓嬮潰鐨勪唬鐮佸疄鐜幫細

闇瑕佸湪楂樻潈闄愮▼搴忓紑濮嬬殑鍦版柟鍔犲叆浠ヤ笅浠g爜,鎸囧畾浠涔堟秷鎭彲浠ユ帴鍙?/span>

 

浠g爜
1 typedef BOOL (WINAPI *_ChangeWindowMessageFilter)( UINT , DWORD);
2
3 BOOL CVistaMsgRecvApp::AllowMeesageForVista(UINT uMessageID, BOOL bAllow)//娉ㄥ唽Vista鍏ㄥ眬娑堟伅
4  {
5 BOOL bResult = FALSE;
6 HMODULE hUserMod = NULL;
7  //vista and later
8 hUserMod = LoadLibrary( L"user32.dll" );
9 if( NULL == hUserMod )
10 {
11 return FALSE;
12 }
13 _ChangeWindowMessageFilter pChangeWindowMessageFilter = (_ChangeWindowMessageFilter)GetProcAddress( hUserMod, "ChangeWindowMessageFilter" );
14 if( NULL == pChangeWindowMessageFilter )
15 {
16 AfxMessageBox(_T("create windowmessage filter failed"));
17 return FALSE;
18 }
19 bResult = pChangeWindowMessageFilter( uMessageID, bAllow ? 1 : 2 );//MSGFLT_ADD: 1, MSGFLT_REMOVE: 2
20 if( NULL != hUserMod )
21 {
22 FreeLibrary( hUserMod );
23 }
24 return bResult;
25 }
瀵逛簬鑷畾涔夋秷鎭紝閫氬父鏄寚澶т簬WM_USER鐨勬秷鎭紝鎴戜滑棣栧厛蹇呴』鍦ㄧ郴緇熶腑娉ㄥ唽璇ユ秷鎭紝鐒跺悗鍦ㄨ皟鐢ㄤ笂闈㈢殑浠g爜:

 

1 #define WM_MYNEWMESSAGE (WM_USER + 999)<BR>UINT uMsgBall=::RegisterWindowMessage (WM_MYNEWMESSAGE )<BR>if(!uMsgBall)<BR>return FALSE;<BR>
娉ㄥ唽娑堟伅閫氳繃RegisterWindowMessage瀹炵幇錛屽嚱鏁扮殑鍙傛暟灝辨槸浣犻渶瑕佹敞鍐岀殑娑堟伅鍊箋?/span>

 

姝ゆ椂錛屼綆絳夌駭鐨勮繘紼嬪氨鍙互鍍忛珮絳夌駭鐨勮繘紼嬪彂閫佹秷鎭簡銆?/span>

闄?Win7涓嬪浣曡搴旂敤紼嬪簭浠ョ鐞嗗憳韜喚榪涜瀹夎鎵ц

1銆佹硶涓錛?/span>

runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"

鎴戞劅瑙夎繖縐嶆柟娉曚笉闈犺氨銆?/span>

2銆佹硶浜岋細

閫氳繃manifest鏂囦歡浣縑C搴旂敤紼嬪簭鑾峰緱綆$悊鍛樻潈闄?/span>

榪欑鏂規硶榪樹笉閿橻1]銆?/span>

<security>

<requestedPrivileges>

<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>

</requestedPrivileges>

</security>

3銆佹硶涓夛細

璧峰悕涓簊etup錛寃in7浼氳嚜宸辨彁鍗囨潈闄愶紝澧炲姞manifest鏂囦歡銆傝繕鏈変竴縐嶆柟娉曟槸鏀規敞鍐岃〃銆侶KEY_CURRENT_USER\Software \Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

娣誨姞涓涓瓧絎︿覆鍊?鍚嶇О灝辨槸浣犵殑紼嬪簭鐨勮礬寰勫拰鍚嶅瓧錛屽間負RUNASADMIN銆?/span>

涔熷彲浠ュ仛鎴愭湇鍔°?/span>

4銆佸叾瀹冩柟娉曪細

榪樻湁鐨勭綉鍙嬭錛氭湁涓紑婧愮殑欏圭洰鍙仛RunAs錛屽氨鏄敤鏉ヤ互鎸囧畾鐢ㄦ埛鏉ヨ繍琛岀▼搴忕殑欏圭洰錛屽彲浠ュ弬鑰?/span>

鍙傝冪綉鍧鍜屾洿澶氶槄璇?/span>

[1] http://hi.baidu.com/crowreturns/blog/item/f5e7cefd7546a284b801a07e.html

[2] http://www.cnblogs.com/sun8134/archive/2009/10/30/1593025.html

[3] 360 璁哄潧

[4] http://topic.csdn.net/u/20100203/14/d98d8310-4971-47d1-94b1-9cdfbf159b4f.html

[5] http://blog.csdn.net/jinhill/archive/2010/07/21/5752870.aspx

[6] Sysinternals Utilities Index

http://technet.microsoft.com/en-us/sysinternals/bb545027.aspx

[7] ChangeWindowMessageFilter

http://msdn.microsoft.com/en-us/library/ms632675%28VS.85%29.aspx

[ Using the ChangeWindowMessageFilter function is not recommended, as it has process-wide scope. Instead, use the ChangeWindowMessageFilterEx function to control access to specific windows as needed. ChangeWindowMessageFilter may not be supported in future versions of Windows.]

錛?錛絟ttp://it.chinawin.net/softwaredev/article-b6f9.html



]]>
VC璋冪敤澶栭儴紼嬪簭鎺ュ彛 (杞?http://m.shnenglu.com/Walker/articles/136660.html婕鑰吤?amp;鈥︹?錕?/dc:creator>婕鑰吤?amp;鈥︹?錕?/author>Thu, 16 Dec 2010 11:48:00 GMThttp://m.shnenglu.com/Walker/articles/136660.htmlhttp://m.shnenglu.com/Walker/comments/136660.htmlhttp://m.shnenglu.com/Walker/articles/136660.html#Feedback0http://m.shnenglu.com/Walker/comments/commentRss/136660.htmlhttp://m.shnenglu.com/Walker/services/trackbacks/136660.html(1) system()

鍑芥暟鍚? system 
鍔?nbsp;鑳? 鍙戝嚭涓涓狣OS鍛戒護 
鐢?nbsp;娉? 
int system(char *command); 
澶?nbsp;娉? system鍑芥暟宸茬粡琚敹褰曞湪鏍囧噯c搴撲腑錛屽彲浠ョ洿鎺ヨ皟鐢?nbsp;
榪斿洖鍊?br>銆銆
=-1:鍑虹幇閿欒 
銆銆
=0:璋冪敤鎴愬姛浣嗘槸娌℃湁鍑虹幇瀛愯繘紼?nbsp;
銆銆
>0:鎴愬姛閫鍑虹殑瀛愯繘紼嬬殑id
鏍蜂緥: 
system(
"D:\\game.exe");

int system(
   
const char *command 
);
int _wsystem(
   
const wchar_t *command 
);



(
2) WinExec()
鍑芥暟鍘熷瀷:
UINT WINAPI WinExec(
  __in          LPCSTR lpCmdLine,
  __in          UINT uCmdShow
);


鍙傛暟璇存槑錛?br>銆銆lpCmdLine錛屻銆
// 鍛戒護璺緞
銆銆uCmdShow錛屻 // 鏄劇ず鏂瑰紡錛屽叡鏈?1縐嶏紝鍏蜂綋鍙互鏌ラ槄MSDN鐨凷howWindow鍑芥暟

榪斿洖鍊鹼細
銆銆鎴愬姛錛岃繑鍥炲煎ぇ浜?1
銆銆榪斿洖0琛ㄧず鍐呭瓨鎴栬呰祫婧愭孩鍑?br>銆銆榪斿洖ERROR_BAD_FORMAT琛ㄧずexe鏂囦歡闈炴硶鎴栬呭凡鎹熷潖銆?br>銆銆榪斿洖ERROR_FILE_NOT_FOUND鎸囧畾鐨勬枃浠舵病鏈夋壘鍒般?br>銆銆榪斿洖ERROR_PATH_NOT_FOUND鎵句笉鍒版寚瀹氳礬寰?br>鏍蜂緥:
銆銆WinExec(
"Notepad.exe", SW_SHOW); // 鎵撳紑璁頒簨鏈?/span>
銆銆WinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED); // 浠ユ渶澶у寲鐨勬柟寮忔墦寮Test.exe錛堟敞鎰忔枃浠跺悕鐨勫ぇ灝忓啓涔熷繀欏誨畬鍏ㄤ竴鏍鳳級


(
3) ShellExecute()
鍑芥暟鍘熷瀷:銆銆銆

HINSTANCE ShellExecute(          
    HWND hwnd,
    LPCTSTR lpOperation,
    LPCTSTR lpFile,
    LPCTSTR lpParameters,
    LPCTSTR lpDirectory,
    INT nShowCmd
);

鐢ㄤ緥:銆ShellExecute(NULL,
"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL); //鎵撳紑C:\Test.txt 鏂囦歡銆銆銆銆銆銆銆銆



(
4) CreateProcess()銆

鍑芥暟鍘熷瀷:

BOOL CreateProcess(
    LPCTSTR lpApplicationName, 
//鎵ц紼嬪簭鍚?/span>
    LPTSTR lpCommandLine, // 鍙傛暟琛?br>    //涓嬮潰涓や釜鍙傛暟鎻忚堪浜嗘墍鍒涘緩鐨勮繘紼嬪拰綰跨▼鐨勫畨鍏ㄥ睘鎬э紝濡傛灉涓篘ULL鍒欎嬌鐢ㄩ粯璁ょ殑瀹夊叏灞炴?/span>
    LPSECURITY_ATTRIBUTES lpProcessAttributes, //榪涚▼瀹夊叏灞炴?/span>
    LPSECURITY_ATTRIBUTES lpThreadAttributes,    // 綰跨▼瀹夊叏灞炴?/span>
    BOOL bInheritHandles, // 緇ф壙鏍囧織
    DWORD dwCreationFlags, // 鍒涘緩鏍囧織
    LPVOID lpEnvironment, // 鐜鍙橀噺
    LPCTSTR lpCurrentDirectory,   // 榪愯璇ヨ繘紼嬬殑鍒濆鐩綍
    LPSTARTUPINFO lpStartupInfo, // 鐢ㄤ簬鍦ㄥ垱寤哄瓙榪涚▼鏃惰緗悇縐嶅睘鎬?/span>
    LPPROCESS_INFORMATION lpProcessInformation //鐢ㄤ簬鍦ㄨ繘紼嬪垱寤哄悗鎺ュ彈鐩稿叧淇℃伅
銆銆); 

璇勮:
system()錛屼富瑕佺敤鍦―OS鐜涓?
WinExec(),綆鍗曞疄鐢紝鏂逛究鎵撳紑鎵ц榪涚▼錛屼絾涓嶈兘鎿嶄綔鎺у埗榪涚▼銆?br>ShellExecute(),澧炲己浜嗘搷浣滆兘鍔涳紝浣嗗榪涚▼鐨勬帶鍒惰繕鏄笉澶熺敤銆?br>CreateProcess(),
鐩墠鏈寮哄姴鐨勮繘紼嬪嚱鏁幫紝閫氳繃璁劇疆StartupInfo緇撴瀯浣撳弬鏁幫紝鏉ヨ緗瓙榪涚▼鐨勫睘鎬э紝瀛愯繘紼嬪垱寤哄悗鐨勪俊鎭篃淇濆瓨鍦≒rocessInformation緇撴瀯浣撲腑錛屼究浜庢搷浣滐紝鍔熻兘寮哄ぇ錛屼絾鍙傛暟榪囧.


]]>
GDI+瀛︿範涔嬬嚎鎬ф笎鍙樼敾鍒?/title><link>http://m.shnenglu.com/Walker/articles/136411.html</link><dc:creator>婕鑰吤?amp;鈥︹?錕?/dc:creator><author>婕鑰吤?amp;鈥︹?錕?/author><pubDate>Tue, 14 Dec 2010 12:52:00 GMT</pubDate><guid>http://m.shnenglu.com/Walker/articles/136411.html</guid><description><![CDATA[<p><br>  GDI+瀛︿範絎旇涔婫DI+鐜鍒濆鍖?鏀惰棌 <br>浣滆咃細鏈遍噾鐏?br>鏉ユ簮錛?a >http://blog.csdn.net/clever101/</a> </p> <p> </p> <p><br>      灝界浠ュ墠鎺ヨЕ榪囦竴涓婫DI+錛屼絾鍐沖績浠庣幇鍦ㄥ紑濮嬬郴緇熷涔燝DI+錛屾墍鐢ㄧ殑鏁欐潗涓恒婄簿閫欸DI緙栫▼銆嬨傚湪VS 2010浠ヤ笅鐗堟湰鐨刅S 緙栬瘧鍣ㄤ嬌鐢℅DI+閮介渶瑕佸GDI+鐜榪涜鍒濆鍖栨搷浣滐紙VS 2010涓殑MFC 10渚濊禆GDI+錛屾晠涓嶇敤鍒濆鍖栵級銆?</p> <p>VS 2003銆乂S 2005鍜孷S 2008鐨凣DI+鐜鍒濆鍖栨搷浣滄楠や竴鏍楓?</p> <p><br>      鍦ㄥ簲鐢ㄧ▼搴忕被娣誨姞涓涓繚鎶ゆ潈闄愮殑鏁版嵁鎴愬憳錛?</p> <p>view plaincopy to clipboardprint?<br>ULONG_PTR m_gdiplusToken;  <br>ULONG_PTR m_gdiplusToken; </p> <p> </p> <p><br>鍦ㄥ簲鐢ㄧ▼搴忕被鐨勫疄鐜版枃浠跺寘鍚玤di+鐨勫ご鏂囦歡錛?</p> <p> </p> <p><br>view plaincopy to clipboardprint?<br>#include <GdiPlus.h>  <br>#include <GdiPlus.h> </p> <p><br>鍦ㄥ伐紼嬮檮鍔犲簱鍔犱笂錛欸diPlus.lib </p> <p> </p> <p><br>鐒跺悗鍦ㄥ簲鐢ㄧ▼搴忕被鐨処nitInstance鍔犱笂涓嬮潰鍒濆鍖栦唬鐮侊細 </p> <p> </p> <p><br>view plaincopy to clipboardprint?<br>BOOL C***App::InitInstance()   <br>{   <br>    Gdiplus::GdiplusStartupInput StartupInput;   <br>    GdiplusStartup(&m_gdiplusToken,&StartupInput,NULL);   <br>}  <br>BOOL C***App::InitInstance()<br>{<br> Gdiplus::GdiplusStartupInput StartupInput;<br> GdiplusStartup(&m_gdiplusToken,&StartupInput,NULL);<br>}<br> </p> <p> </p> <p>涓婇潰浠g爜鐨勪綔鐢ㄦ槸鍒濆鍖朑DI+璧勬簮銆?</p> <p> </p> <p><br>  鍦ㄥ簲鐢ㄧ▼搴忕被鐨処nitInstance鍔犱笂涓嬮潰浠g爜錛?</p> <p> </p> <p><br>view plaincopy to clipboardprint?<br>int C***App::ExitInstance()   <br>{   <br>    // TODO: 鍦ㄦ娣誨姞涓撶敤浠g爜鍜?鎴栬皟鐢ㄥ熀綾?nbsp;  <br>       <br>    Gdiplus::GdiplusShutdown(m_gdiplusToken);   <br>    return __super::ExitInstance();   <br>}  <br>int C***App::ExitInstance()<br>{<br> // TODO: 鍦ㄦ娣誨姞涓撶敤浠g爜鍜?鎴栬皟鐢ㄥ熀綾?br>    <br> Gdiplus::GdiplusShutdown(m_gdiplusToken);<br> return __super::ExitInstance();<br>}<br> </p> <p> </p> <p>涓婇潰浠g爜鐨勪綔鐢ㄦ槸閿姣丟DI+璧勬簮銆?</p> <p><br>VC 6.0涓嬌鐢℅DI+搴擄紝璇峰弬鑰冭繖綃囨枃绔狅細鍦╒C6.0涓嬌鐢℅DI+鐨勪袱縐嶅姙娉?</p> <p> </p> <p><br>     鐜板湪嫻嬭瘯涓涓嬫垜浠垵濮嬪寲GDI+鐜鏄惁鎴愬姛銆傛垜浠嬌鐢℅DI+鐨勭被鎺ュ彛鍦ㄨ鍥懼鎴峰尯緇樺埗涓涓瓧絎︿覆錛屽叿浣撲唬鐮佸涓嬶細 </p> <p> </p> <p><br>view plaincopy to clipboardprint?<br>CDC *pDC = pView->GetDC();   <br>Gdiplus::Graphics graphics(pDC->m_hDC);   <br>Gdiplus::Pen pen(Gdiplus::Color(255,0,0,255));   <br>Gdiplus::SolidBrush brush(Gdiplus::Color(255,0,0,255));   <br>Gdiplus::FontFamily fontfm(L"瀹嬩綋");   <br>Gdiplus::Font font(&fontfm,24,Gdiplus::FontStyleRegular,Gdiplus::UnitPixel);   <br>CRect rt;   <br>pView->GetClientRect(&rt);   <br>Gdiplus::PointF pointF(rt.Width()/2,rt.Height()/2);   <br>   graphics.DrawString(L"GDI+紼嬪簭紺烘剰",-1,&font,pointF,&brush);   <br>   graphics.ReleaseHDC(pDC->m_hDC);   <br>   pView->ReleaseDC(pDC);  <br> CDC *pDC = pView->GetDC();<br> Gdiplus::Graphics graphics(pDC->m_hDC);<br> Gdiplus::Pen pen(Gdiplus::Color(255,0,0,255));<br> Gdiplus::SolidBrush brush(Gdiplus::Color(255,0,0,255));<br> Gdiplus::FontFamily fontfm(L"瀹嬩綋");<br> Gdiplus::Font font(&fontfm,24,Gdiplus::FontStyleRegular,Gdiplus::UnitPixel);<br> CRect rt;<br> pView->GetClientRect(&rt);<br> Gdiplus::PointF pointF(rt.Width()/2,rt.Height()/2);<br>    graphics.DrawString(L"GDI+紼嬪簭紺烘剰",-1,&font,pointF,&brush);<br>    graphics.ReleaseHDC(pDC->m_hDC);<br>    pView->ReleaseDC(pDC);<br> </p> <p> </p> <p> </p> <p> </p> <p>鏁堟灉鍥懼涓嬶細 </p> <p> </p> <p><br> </p> <p> </p> <p> </p> <p> </p> <p><br>浣跨敤GDI+涓浜涙敞鎰忎簨欏癸細 </p> <p> </p> <p><br>1.鍦―LL涓嬌鐢℅DI+搴擄紝鍙渶瑕佸寘鍚獹diPlus.h鍜孏diPlus.lib錛屽垵濮嬪寲GDI+鐜鐨勫伐浣滃彧闇瑕佸湪涓昏皟鐢ㄧ▼搴忓仛錛屽惁鍒欏湪DLL鍒濆鍖栦唬鐮佷腑鍒濆鍖朑DI+鐜瀹規槗鍙戠敓DLL閲嶅叆鐨勯敊璇紙浠ュ墠鎴戠姱榪囪繖鏍風殑閿欒錛夈?</p> <p> </p> <p><br>2.GDI+鎺ュ彛鍙傛暟浣跨敤鐨勬槸unicode瀛楃闆嗭紝鍥犱負璋冪敤浠諱綍GDI+綾繪帴鍙f椂鍏跺瓧絎︿覆鍙傛暟閮藉繀欏葷‘淇濇槸unicode瀛楃銆傚湪澶氬瓧鑺傚瓧絎﹂泦鐜涓嬪紑鍙戝父閲忓瓧絎︿覆鍙互閫氳繃L瀹忚漿鎹?鍙橀噺澶氬瓧鑺傚瓧絎﹁漿unicode瀛楃鍙互浣跨敤Windows API鍑芥暟MultiByteToWideChar鎴朅TL鐨凙2W瀹忋?</p> <p> </p> <p><br>3. GDI+鐨勫璞″拰GDI鍙ユ焺涓鏍鳳紝鍚屾牱浼氬崰鐢ㄨ祫婧愶紝涓嬈′嬌鐢ㄨ繃澶氱殑GDI+鐨勫璞$敋鑷充細鍙戠敓紼嬪簭宕╂簝鐨勭幇璞°傚洜姝ゅ繀欏婚殢鏃跺皢涓嶅繀瑕佺殑GDI+鐨勫璞″崰鐢ㄧ殑璧勬簮閲婃斁鎺夛紝濡備笂渚嬬殑錛歡raphics.ReleaseHDC(pDC->m_hDC)銆?</p> <p> </p> <p>鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/clever101/archive/2010/12/08/6063670.aspx</a><br>浣滆咃細鏈遍噾鐏?br>鏉ユ簮錛?a >http://blog.csdn.net/clever101/</a> </p> <p> </p> <p><br>      鎴戝彂鐜頒嬌鐢℅DI+鏉ュ埗浣滅敾鍥懼伐鍏風殑璋冭壊鏉挎瀬涓烘柟渚匡紙榪欎釜宸ヤ綔濡傛灉璁〨DI鏉ュ仛涓嶇煡瑕佸啓澶氬皯浠g爜錛夈備笅闈㈡垜浠涔犱竴涓婫DI+鐨勭嚎鎬ф笎鍙樼敾鍒鳳細LinearGradientBrush綾葷殑鐢ㄦ硶錛屽叿浣撲唬鐮佸涓嬶細 </p> <p> </p> <p><br>      view plaincopy to clipboardprint?<br>    CDC *pDC = pView->GetDC();   <br>     // 瀹氫箟涓涓敾鍥懼璞?nbsp;  <br>    Gdiplus::Graphics graphics(pDC->m_hDC);   <br>       <br>     // 鑾峰彇瑙嗗浘瀹㈡埛鍖哄ぇ灝?nbsp;  <br>     CRect rt;   <br>     pView->GetClientRect(&rt);   <br>// 瀹氫箟涓涓嚎鎬ф笎鍙樼敾鍒鳳紝鎸夌孩榛勮摑緇跨殑欏哄簭鍥涚棰滆壊娓愬彉   <br>     LinearGradientBrush linGrBrush(Point(100,0),Point(100,rt.Height()/2),Color(255,255,0,0),Color(255,0,0,255));   <br>     Color colors[] = {   <br>         Color(255, 255, 0, 0),   // red   <br>         Color(255, 255, 255, 0), //yellow   <br>         Color(255, 0, 0, 255),   // blue   <br>         Color(255, 0, 255, 0)};  // green   <br>         REAL positions[] = {   <br>             0.0f,      <br>             0.33f,      <br>             0.66f,   <br>             1.0f};     <br>    linGrBrush.SetInterpolationColors(colors, positions,4);   <br>    // 濉厖鎸囧畾鍖哄煙鐭╁艦   <br>    graphics.FillRectangle(&linGrBrush,rt.Width()/2,0,80,rt.Height()/2);   <br> CDC *pDC = pView->GetDC();<br>    // 瀹氫箟涓涓敾鍥懼璞?br> Gdiplus::Graphics graphics(pDC->m_hDC);<br>    <br>  // 鑾峰彇瑙嗗浘瀹㈡埛鍖哄ぇ灝?br>  CRect rt;<br>  pView->GetClientRect(&rt);<br>// 瀹氫箟涓涓嚎鎬ф笎鍙樼敾鍒鳳紝鎸夌孩榛勮摑緇跨殑欏哄簭鍥涚棰滆壊娓愬彉<br>     LinearGradientBrush linGrBrush(Point(100,0),Point(100,rt.Height()/2),Color(255,255,0,0),Color(255,0,0,255));<br>  Color colors[] = {<br>   Color(255, 255, 0, 0),   // red<br>         Color(255, 255, 255, 0), //yellow<br>   Color(255, 0, 0, 255),   // blue<br>   Color(255, 0, 255, 0)};  // green<br>   REAL positions[] = {<br>    0.0f,   <br>    0.33f,   <br>    0.66f,<br>    1.0f};  <br> linGrBrush.SetInterpolationColors(colors, positions,4);<br> // 濉厖鎸囧畾鍖哄煙鐭╁艦<br> graphics.FillRectangle(&linGrBrush,rt.Width()/2,0,80,rt.Height()/2);  </p> <p> </p> <p><br>     鏁堟灉濡備笅錛?</p> <p> </p> <p><br>         </p> <p> </p> <p><br>          榪欎釜綰挎ф笎鍙樼敾鍒峰緢綆鍗曪紝灝辨槸鎸夊瀭鐩存柟鍚戯紙鍗硑杞存柟鍚戯級娓愬彉鐨勩傛垜鎰熷叴瓚g殑鏄敾鍒風殑涓や釜鍙傛暟Point(100,0),Point(100,rt.Height()/2)錛屼功涓婁粙緇嶇殑璧風偣鐨勯鑹插拰緇堢偣棰滆壊鐨勪綅緗拰瑕佸~鍏呯殑鐭╁艦涔嬮棿鐨勫叧緋繪槸鎬庢牱鐨勶紵鎴戜滑鐪嬪埌涓婇潰鐨勭敾鍒風殑璧風偣鍜岀粓鐐圭殑楂樺害鍜岃濉厖鐨勭煩褰㈢殑楂樺害鏄竴鏍風殑錛岄兘鏄痳t.Height()/2銆傛垜浠妸鐢誨埛鐨勯珮搴︾緝灝忎負鍘熸潵鐨勪竴鑸紝鐪嬬湅鏈変粈涔堟晥鏋滐紝鍗沖畾涔変負錛?</p> <p> </p> <p><br>       view plaincopy to clipboardprint?<br>LinearGradientBrush linGrBrush(Point(100,0),Point(100,rt.Height()/4),Color(255,255,0,0),Color(255,0,0,255));  <br>LinearGradientBrush linGrBrush(Point(100,0),Point(100,rt.Height()/4),Color(255,255,0,0),Color(255,0,0,255)); </p> <p>鏁堟灉鍥懼涓嬶細 </p> <p> </p> <p><br> </p> <p> </p> <p><br>     鎴戜滑鍙戠幇涓婂浘絳変簬榪炵畫鐢ㄤ袱涓敾鍒峰~鍏呰繖涓煩褰€傚亣濡傚~鍏呯殑鐩爣鐭╁艦鐨勯珮搴﹀皬浜庣敾鍒風殑楂樺害錛屽張浼氭槸鎬庢牱鐨勬晥鏋滃憿錛熶唬鐮佹敼涓猴細 </p> <p> </p> <p><br>view plaincopy to clipboardprint?<br>LinearGradientBrush linGrBrush(Point(100,0),Point(100,rt.Height()/2),Color(255,255,0,0),Color(255,0,255,0));   <br>     Color colors[] = {   <br>         Color(255, 255, 0, 0),   // red   <br>         Color(255, 255, 255, 0), //yellow   <br>         Color(255, 0, 0, 255),   // blue   <br>         Color(255, 0, 255, 0)};  // green   <br>         REAL positions[] = {   <br>             0.0f,      <br>             0.33f,      <br>             0.66f,   <br>             1.0f};     <br>    linGrBrush.SetInterpolationColors(colors, positions,4);   <br>    // 濉厖鎸囧畾鍖哄煙鐭╁艦   <br>    graphics.FillRectangle(&linGrBrush,rt.Width()/2,0,80,rt.Height()/4);  <br>LinearGradientBrush linGrBrush(Point(100,0),Point(100,rt.Height()/2),Color(255,255,0,0),Color(255,0,255,0));<br>  Color colors[] = {<br>   Color(255, 255, 0, 0),   // red<br>         Color(255, 255, 255, 0), //yellow<br>   Color(255, 0, 0, 255),   // blue<br>   Color(255, 0, 255, 0)};  // green<br>   REAL positions[] = {<br>    0.0f,   <br>    0.33f,   <br>    0.66f,<br>    1.0f};  <br> linGrBrush.SetInterpolationColors(colors, positions,4);<br> // 濉厖鎸囧畾鍖哄煙鐭╁艦<br> graphics.FillRectangle(&linGrBrush,rt.Width()/2,0,80,rt.Height()/4);<br> </p> <p> </p> <p><br>鏁堟灉鍥懼涓嬶細 </p> <p> </p> <p><br> </p> <p> </p> <p> </p> <p>    鎴戜滑鐪嬪埌榪欐椂鐭╁艦鍖哄煙鐨勫~鍏呭彧浣跨敤浜嗙敾鍒風殑涓閮ㄥ垎銆傝繖鏃舵垨璁告垜浠彲浠ュ緱鍑轟竴涓畝鍗曠殑緇撹錛氱敤鐢誨埛濉厖澶氳竟褰㈠尯鍩燂紝鏈夌偣綾諱技浜庨摵鍦扮爾錛屽湴鐮栧ソ姣旂敾鍒鳳紝絀哄湴濂芥瘮瑕佸~鍏呯殑鍖哄煙鍖哄煙銆?</p> <p> </p> <p><br>鎬濊冮錛?</p> <p> </p> <p><br>      綰挎ф笎鍙樼敾鍒風殑璧風偣鍜岀粓鐐圭殑鍧愭爣鍊煎拰瑕佸~鍏呯殑鐭╁艦涔嬮棿鏄粈涔堝叧緋伙紵 </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p>鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/clever101/archive/2010/12/08/6063697.aspx</a></p> <img src ="http://m.shnenglu.com/Walker/aggbug/136411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Walker/" target="_blank">婕鑰吤?鈥︹?錕?/a> 2010-12-14 20:52 <a href="http://m.shnenglu.com/Walker/articles/136411.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鎺т歡閫氱煡娑堟伅http://m.shnenglu.com/Walker/articles/136328.html婕鑰吤?amp;鈥︹?錕?/dc:creator>婕鑰吤?amp;鈥︹?錕?/author>Mon, 13 Dec 2010 12:30:00 GMThttp://m.shnenglu.com/Walker/articles/136328.html鎺т歡閫氱煡娑堟伅
    
鍦ㄣ婃繁搴﹁В鏋?span>VC涓殑娑堟伅錛堜笂錛夈嬩腑錛屾垜浠彁鍒頒簡娑堟伅鐨勫垎綾繪湁3縐嶏細紿楀彛娑堟伅銆佸懡浠ゆ秷鎭拰鎺т歡閫氱煡娑堟伅錛屾垜浠繖閲岃璋堢殑鏄渶鍚庝竴縐嶏細鎺т歡閫氱煡娑堟伅銆?span>
     鎺т歡閫氱煡娑堟伅錛屾槸鎸囪繖鏍蜂竴縐嶆秷鎭紝涓涓獥鍙e唴鐨勫瓙鎺т歡鍙戠敓浜嗕竴浜涗簨鎯咃紝闇瑕侀氱煡鐖剁獥鍙c傞氱煡娑堟伅鍙傜敤浜庢爣鍑嗙殑紿楀彛鎺т歡濡傛寜閽佸垪琛ㄦ銆佺粍鍚堟銆佺紪杈戞錛屼互鍙?span>Windows鍏叡鎺т歡濡傛爲鐘惰鍥俱佸垪琛ㄨ鍥劇瓑銆備緥濡傦紝鍗曞嚮鎴栧弻鍑諱竴涓帶浠躲佸湪鎺т歡涓夋嫨閮ㄥ垎鏂囨湰銆佹搷浣滄帶浠剁殑婊氬姩鏉¢兘浼氫駭鐢熼氱煡娑堟伅銆傚ス綾諱技浜庡懡浠ゆ秷鎭紝褰撶敤鎴蜂笌鎺т歡紿楀彛浜や簰鏃訛紝閭d箞鎺т歡閫氱煡娑堟伅灝變細浠庢帶浠剁獥鍙e彂閫佸埌瀹冪殑涓葷獥鍙c備絾鏄繖縐嶆秷鎭殑瀛樺湪騫朵笉鏄負浜嗗鐞嗙敤鎴峰懡浠わ紝鑰屾槸涓轟簡璁╀富紿楀彛鑳藉鏀瑰彉鎺т歡錛屼緥濡傚姞杞姐佹樉紺烘暟鎹備緥濡傛寜涓嬩竴涓寜閽紝浠栧悜鐖剁獥鍙e彂閫佺殑娑堟伅涔熷彲浠ョ湅浣滄槸涓涓帶浠墮氱煡娑堟伅錛涘崟鍑婚紶鏍囨墍浜х敓鐨勬秷鎭彲浠ョ敱涓葷獥鍙g洿鎺ュ鐞嗭紝鐒跺悗浜ょ粰鎺т歡紿楀彛澶勭悊銆?span>
     鎺т歡閫氱煡娑堟伅涓昏鐢辯獥鍙g被鍗崇洿鎺ユ垨闂存帴鐢?span>CWND綾繪淳鐢熺被澶勭悊銆?/span>

    鎺т歡閫氱煡鏍煎紡
    
鎺т歡閫氱煡緇忓巻浜嗕竴涓紨鍙樿繃紼嬶紝鍥犺?span>SendMessage( )鐨勫彉閲?span>Message銆?span>wParam鍜?span>lParam鏈変笁縐嶆牸寮忋?span>
     絎竴鎺т歡閫氱煡鏍煎紡
    
絎竴鎺т歡閫氱煡鏍煎紡鍙槸紿楀彛娑堟伅鐨勫瓙闆嗐傚畠鐨勭壒寰佹牸寮忓涓嬶細WM_XXXX銆傚畠涓昏鏉ヨ嚜涓嬮潰鐨?span>3縐嶆秷鎭被鍨嬶細
     (1)
琛ㄧず涓涓帶浠剁獥鍙h涔堝凡緇忚鍒涘緩鎴栭攢姣侊紝瑕佷箞宸茬粡琚紶鏍囧崟鍑葷殑娑堟伅錛?span>WM_PARENTNOTIFY錛?span>
     (2)鍙戦佸埌鐖剁獥鍙o紝鐢ㄦ潵緇樺埗鑷韓紿楀彛鐨勬秷鎭紝渚嬪錛?span> WM_CTLCOLOR銆?span>WM_DRAWITEM銆?span>WM_MEASUREITEM銆?span>WM_DELETEITEM銆?span>WM_CHARTOITEM銆?span>WM_VKTOITEM銆?span>WM_COMMAND鍜?span>WM_COMPAREITEM
     (3)鏈夋粴鍔ㄨ皟鎺т歡鍙戦侊紝閫氱煡鐖剁獥鍙f粴鍔ㄧ獥鍙g殑娑堟伅錛?span>WM_VSCROLL鍜?span>WM_HSCROLL
     絎簩鎺т歡閫氱煡鏍煎紡
    
絎簩鎺т歡閫氱煡鏍煎紡涓庡懡浠ゆ秷鎭叡浜紝瀹冪殑鐗瑰緛鏍煎紡濡備笅錛?span>WM_COMMAND銆?span>
     鍦?span>WM_COMMAND涓紝lParam鐢ㄦ潵鍖哄垎鏄懡浠ゆ秷鎭繕鏄帶浠墮氱煡娑堟伅錛氬鏋?span>lParam涓?span>NULL錛屽垯榪欐槸涓懡浠ゆ秷鎭紝鍚﹀垯lParam閲岄潰鏀劇殑蹇呯劧灝辨槸鎺т歡鐨勫彞鏌勶紝鏄竴涓帶浠墮氱煡娑堟伅銆?span>瀵逛簬wParam鍒欐槸浣庝綅鏀劇殑鏄帶浠?span>ID錛岄珮浣嶆斁鐨勬槸鐩稿簲鐨勬秷鎭簨浠躲?span>
     絎笁鎺т歡閫氱煡鏍煎紡
    
榪欎釜鎵嶇湡姝f秹鍙婂埌鎴戜滑瑕佽鐨勫唴瀹癸紝鍚屾椂浠栦篃鏄渶涓虹伒媧葷殑涓縐嶆牸寮忋傚畠鐨勭壒寰佹牸寮忓涓嬶細WM_NOTIFY銆?span>
     鍦?span>WM_NOTIFY涓紝lParam涓斁鐨勬槸涓涓О涓?a name=baidusnap0>NMHDR緇撴瀯鐨勬寚閽堛傚湪wParam涓斁鐨勫垯鏄帶浠剁殑ID銆?/span>

    NMHDR緇撴瀯鐨勭敱鏉?/span>
    NMHDR
緇撴瀯鏄緢鍊煎緱涓鎻愮殑錛岃緇撴瀯鍖呮嫭鏈夊叧鍒朵綔璇ラ氱煡鐨勬帶浠剁殑浠諱綍鍐呭錛岃屼笉鍙楃┖闂村拰綾誨瀷鐨勯檺鍒訛紝浠栫殑鏉ュ巻涔熸槸寰堟湁鎰忔濈殑銆?span>
    
鍦ㄦ渶鍒濈殑windows3.x涓紝鏍規湰灝變笉瀛樺湪浠涔?span>WM_NOTIFY
錛屾帶浠墮氱煡瀹冧滑鐖剁獥鍙o紝濡傞紶鏍囩偣鍑?span>,鎺т歡鑳屾櫙緇樺埗浜嬩歡錛岄氳繃鍙戦佷竴涓秷鎭埌鐖剁獥鍙c傜畝鍗曠殑閫氱煡浠呭彂閫佷竴涓?span>WM_COMMAND娑堟伅錛屽寘鍚竴涓氱煡鐮佸拰涓涓湪wParam涓殑鎺т歡ID鍙婁竴涓湪lPraram涓殑鎺т歡鍙ユ焺銆傝繖鏍蜂竴鏉ワ紝wParam鍜?span>lParam灝遍兘琚~鍏呬簡錛屾病鏈夐澶栫殑絀洪棿鏉ヤ紶閫掍竴浜涘叾瀹冪殑娑堟伅錛屼緥濡傞紶鏍囨寜涓嬬殑浣嶇疆鍜屾椂闂淬?span>
     涓轟簡鍏嬫湇榪欎釜鍥伴毦錛?span>windows3.x灝辨彁鍑轟簡涓涓瘮杈冧綆綰х殑瑙e喅絳栫暐錛岄偅灝辨槸緇欎竴浜涙秷鎭坊鍔犱竴浜涢檮鍔犳秷鎭紝鏈涓烘槑鏄劇殑灝辨槸鎺т歡鑷敾鐢ㄥ埌鐨?span>DRAWITEMSTRUCT銆備笉鐭ラ亾澶у瀵硅繖涓粨鏋勭啛鎮変笉錛屼笉榪囷紝濡傛灉浣犳槸鑰佹墜錛屼綘搴旇闈炲父娓呮榪欎釜緇撴瀯錛岃繖涓粨鏋勫寘鍚簡9涓唴瀹癸紝鍑犱箮浣犻渶瑕佹帶鍒剁殑淇℃伅閮界粰浣犳彁渚涗簡銆備負浠涔堣瀹冩瘮杈冧綆綰у憿錛熷洜涓轟笉鍚岀殑娑堟伅闄勫姞鐨勫唴瀹逛笉鍚岋紝緇撴灉灝辨槸涓鐩樻暎娌欙紝闈炲父娣蜂貢銆?span>
     鍦?span>win32涓紝MS鍙堟彁鍑轟簡涓涓洿濂界殑瑙e喅鏂規錛氬紩榪?strong>NMHDR
緇撴瀯銆傝繖涓粨鏋勭殑寮曡繘灝辨槸娑堟伅緇熶竴璧鋒潵錛屽埄鐢ㄥ畠鍙互浼犻掑鏉傜殑淇℃伅銆傝繖涓粨鏋勭殑甯冨眬濡備笅錛?span>
    NMHDR
     {
         HWnd hWndFrom ; 鐩稿綋浜庡師WM_COMMAND浼犻掓柟寮忕殑lParam
         UINT idFrom ;   
鐩稿綋浜庡師WM_COMMAND浼犻掓柟寮忕殑wParam錛?span>low-order錛?span>
         UINT code ;      鐩稿綋浜庡師WM_COMMAND浼犻掓柟寮忕殑Notify Code(wParam"s high-order)
     }
錛?span>
     瀵逛簬榪欎釜緇撴瀯鐨勫簲鐢ㄤ簬WM_NOTIFY淇℃伅緇撴瀯錛岀粨鏋?span>WM_NOTIFY灝卞彉鎴愪簡錛?span>
     A銆佹棤闄勫姞淇℃伅銆傜粨鏋勫彉寰楀緢綆鍗曪紝灝辨槸涓涓?strong>NMHDR
緇撴瀯銆?span>
     B銆佹湁闄勫姞淇℃伅銆傚畾涔変竴涓ぇ鐨勭粨鏋勶紝瀹冪殑絎竴涓厓绱犲氨鏄?strong>NMHDR緇撴瀯錛屽畠鐨勫悗闈㈡斁緗檮鍔犱俊鎭?span>
    
    WM_NOTIFY緇撴瀯鐨勫ソ澶?/span>
    
闄や簡涓婇潰鎴戜滑鎵璇寸殑濂藉澶栵紝WN_NOTIFY榪樻湁鑷繁鐨勭嫭鐗圭殑濂藉錛?span>
    
鐢變簬鍦ㄥぇ緇撴瀯涓紝絎竴涓垚鍛樹負NMHDR,榪欐牱涓鏉ワ紝鎴戜滑灝卞彲浠ュ埄鐢ㄦ寚鍚?strong>NMHDR鐨勬寚閽堟潵浼犻掔粨鏋勫湴鍧錛屾牴鎹寚閽堢殑鐗規э紝鏃犺娑堟伅鏈夋病鏈夐檮鍔犱俊鎭紝榪欎釜鎸囬拡閮介傜敤錛屼篃鑳藉寰堟柟渚跨殑榪涜寮哄埗杞崲銆?/span>

    鍒嗘瀽ON_NOTIFY
  
綾誨悜瀵煎彲浠ュ垱寤?span>ON_NOTIFY娑堟伅鏄犲皠鍏ュ彛騫舵彁渚涗竴涓鐞嗗嚱鏁扮殑妗嗘灦錛屾潵澶勭悊 WM_NOTIFY綾誨瀷鐨勬秷鎭?span>ON_NOTIFY娑堟伅鏄犲皠瀹忔湁濡備笅璇硶.
銆銆銆ON_NOTIFY(wNotifyCode,id,memberFxn)
銆銆鍏朵腑錛?span>wNotifyCode:瑕佸鐞嗙殑閫氱煡娑堟伅閫氱煡鐮併傛瘮濡備笂闈㈡垜浠彁鍒扮殑LVN_KEYDOWN錛?span>Id:鎺т歡鏍囪瘑ID錛?span>MemberFxn:澶勭悊姝ゆ秷鎭殑鎴愬憳鍑芥暟銆?span>
銆銆姝ゆ垚鍛樺嚱鏁版湁濡備笅鐨勫師鍨嬪0鏄?span>:
銆銆銆afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result);
銆銆姣斿:鍋囪浣犳兂鎴愬憳鍑芥暟OnKeydownList1澶勭悊ClistCtrl(鏍囪瘑ID=IDC_LIST1錛夌殑 LVN_KEYDOWN娑堟伅,浣犲彲浠ヤ嬌鐢ㄧ被鍚戝娣誨姞濡備笅鐨勬秷鎭槧灝?span>:
銆銆銆ON_NOTIFY( LVN_KEYDOWN, IDC_LIST1, OnKeydownList1 )
銆銆鍦ㄤ笂闈㈢殑渚嬪瓙涓?span>,綾誨悜瀵兼彁渚涘涓嬪嚱鏁?span>:
銆銆銆void CMessageReflectionDlg::OnKeydownList1(NMHDR* pNMHDR, LRESULT* pResult)
銆銆銆銆{
銆銆銆銆銆LV_KEYDOWN* pLVKey= (LV_KEYDOWN*)pNMHDR;
銆銆銆銆銆*pResult = 0;
銆銆銆銆 }
銆銆榪欐椂綾誨悜瀵兼彁渚涗簡涓涓傚綋綾誨瀷鐨勬寚閽堬紝浣犳棦鍙互閫氳繃pNMHDR錛屼篃鍙互閫氳繃 pLVKey鏉ヨ闂繖涓氱煡緇撴瀯銆?/span>

    ON_NOTIFY_RANGE
銆銆鏈夋椂鎴戜滑鍙兘闇瑕佷負涓緇勬帶浠跺鐞嗙浉鍚岀殑WM_NOTIFY娑堟伅銆傝繖鏃墮渶瑕佷嬌鐢?span>ON_NOTIFY_RANGE鑰屼笉鏄?span>ON_NOTIFY銆備笉榪囷紝寰堜笉騫哥殑鏄紝VC6鐨?span>ClassWizard騫朵笉鏀寔榪欎釜娑堟伅錛屾墍浠ユ垜浠繀欏繪墜宸ユ坊鍔犮傛柟娉曞拰涓鑸殑鎵嬪伐娣誨姞鐨勬秷鎭竴鏍鳳紝涓嶈繃闇瑕佹敞鎰忕殑鏄細
     (1)
褰撲綘浣跨敤 ON_NOTIFY_RANGE鏃?span>,浣犻渶瑕佹寚瀹氭帶浠剁殑ID鑼冨洿.鍏舵秷鎭槧灝勫叆鍙e強鍑芥暟鍘熷瀷濡備笅:
銆銆銆   ON_NOTIFY_RANGE( wNotifyCode, id, idLast, memberFxn )
銆銆銆銆鍏朵腑錛?span>wNotifyCode:娑堟伅閫氱煡鐮?span>.姣斿:LVN_KEYDOWN銆?span>id: 絎竴鎺т歡鐨勬爣璇?span>ID銆?span>
銆銆銆銆銆idLast:鏈鍚庝竴涓帶浠剁殑鏍囪瘑ID銆傦紙鏍囪瘑鍊間竴瀹氳榪炵畫錛?span>memberFxn: 娑堟伅澶勭悊鍑芥暟銆?span>
銆銆(2)鎴愬憳鍑芥暟蹇呴』鏈夊涓嬪師鍨嬬敵鏄庯細afx_msg void memberFxn( UINT id, NMHDR * pNotifyStruct, LRESULT * result );

    緇撴潫璇細
     WM_NOTIFY
鏄竴涓緢鍊煎緱鎬濊冪殑緇撴瀯錛屽彟澶栦粬鍜?span>Reflect Message鑱旂郴闈炲父绱у瘑錛屾垜浠帴涓嬫潵灝辮璁ㄨ涓涓嬪弽灝勬秷鎭?/span>



]]>Windows娑堟伅錛堣漿錛?/title><link>http://m.shnenglu.com/Walker/articles/136326.html</link><dc:creator>婕鑰吤?amp;鈥︹?錕?/dc:creator><author>婕鑰吤?amp;鈥︹?錕?/author><pubDate>Mon, 13 Dec 2010 11:47:00 GMT</pubDate><guid>http://m.shnenglu.com/Walker/articles/136326.html</guid><description><![CDATA[     鎽樿:   杞創:娣卞害瑙f瀽VC涓殑娑堟伅(涓? 鏀惰棌 hustli錛堝師浣滐級杞嚜csdn.net鎽樿錛歐indows緙栫▼鍜孌os緙栫▼錛屼竴涓緢澶х殑鍖哄埆灝辨槸錛寃indows緙栫▼鏄簨浠墮┍鍔紝娑堟伅浼犻掔殑銆傛墍浠ワ紝瑕佸仛濂絯indows緙栫▼錛屽繀欏誨娑堟伅鏈哄埗鏈変竴涓竻妤氱殑璁よ瘑錛屾湰鏂囧笇鏈涜兘澶熷娑堟伅鐨勪紶閫掑仛涓涓叏闈㈢殑璁鴻堪錛岀敱浜庡皬鐢熷垵瀛C錛岄噷闈㈠彲鑳芥湁涓浜涢敊璇殑鍦版柟錛岃繕寰鍚勪綅澶ц櫨鎵硅瘎銆佹寚姝c? 娉ㄦ剰錛氭湁浜?..  <a href='http://m.shnenglu.com/Walker/articles/136326.html'>闃呰鍏ㄦ枃</a><img src ="http://m.shnenglu.com/Walker/aggbug/136326.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Walker/" target="_blank">婕鑰吤?鈥︹?錕?/a> 2010-12-13 19:47 <a href="http://m.shnenglu.com/Walker/articles/136326.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.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://whdzjc.com" target="_blank">欧美国产一区二区三区激情无套</a>| <a href="http://topjavhd.com" target="_blank">麻豆国产精品va在线观看不卡</a>| <a href="http://668334.com" target="_blank">亚洲综合精品一区二区</a>| <a href="http://scptw.com" target="_blank">狠狠入ady亚洲精品经典电影</a>| <a href="http://59812mh.com" target="_blank">欧美国产一区二区在线观看 </a>| <a href="http://95gun.com" target="_blank">国产精品人成在线观看免费</a>| <a href="http://50ud.com" target="_blank">老司机精品福利视频</a>| <a href="http://238918.com" target="_blank">亚洲午夜精品国产</a>| <a href="http://szywsj.com" target="_blank">亚洲精品中文字</a>| <a href="http://hzjqkj.com" target="_blank">亚洲精品一区在线观看</a>| <a href="http://eguge.com" target="_blank">一区二区欧美日韩</a>| <a href="http://540669.com" target="_blank">亚洲欧美在线免费</a>| <a href="http://392294.com" target="_blank">亚洲欧美文学</a>| <a href="http://gg5gg.com" target="_blank">久久米奇亚洲</a>| <a href="http://csjtzn.com" target="_blank">欧美大片一区二区三区</a>| <a href="http://www515678.com" target="_blank">欧美啪啪成人vr</a>| <a href="http://hbdfgq.com" target="_blank">国产精品乱子乱xxxx</a>| <a href="http://2343ww.com" target="_blank">国产自产2019最新不卡</a>| <a href="http://7redy.com" target="_blank">韩国亚洲精品</a>| <a href="http://wwww76.com" target="_blank">亚洲最新在线视频</a>| <a href="http://weixiao668.com" target="_blank">亚洲影院高清在线</a>| <a href="http://800716.com" target="_blank">羞羞视频在线观看欧美</a>| <a href="http://26thb.com" target="_blank">久久午夜电影网</a>| <a href="http://www201314.com" target="_blank">蜜桃av噜噜一区</a>| <a href="http://pppp95.com" target="_blank">欧美国产日韩在线</a>| <a href="http://yw8333.com" target="_blank">亚洲夜间福利</a>| <a href="http://b871.com" target="_blank">久久精品亚洲精品</a>| <a href="http://6966g.com" target="_blank">欧美精选午夜久久久乱码6080</a>| <a href="http://zz9876.com" target="_blank">欧美日韩一区二区三区</a>| <a href="http://880895.com" target="_blank">国产女主播一区二区三区</a>| <a href="http://pinyuanad.com" target="_blank">国产综合欧美</a>| <a href="http://9585865.com" target="_blank">一区二区日韩精品</a>| <a href="http://maokk88.com" target="_blank">亚洲伊人色欲综合网</a>| <a href="http://jzsp101.com" target="_blank">久久青草久久</a>| <a href="http://961318.com" target="_blank">亚洲午夜未删减在线观看</a>| <a href="http://wwdd44.com" target="_blank">欧美三日本三级少妇三99</a>| <a href="http://tcgo903.com" target="_blank">亚洲在线观看</a>| <a href="http://x946.com" target="_blank">麻豆国产精品777777在线</a>| <a href="http://www369cf.com" target="_blank">欧美高清视频一区二区三区在线观看</a>| <a href="http://91keshi.com" target="_blank">欧美第十八页</a>| <a href="http://ggg4444.com" target="_blank">好吊妞**欧美</a>| <a href="http://686852a.com" target="_blank">亚洲伊人第一页</a>| <a href="http://kdy444.com" target="_blank">亚洲高清免费在线</a>| <a href="http://360cabin.com" target="_blank">妖精视频成人观看www</a>| <a href="http://y65c.com" target="_blank">久久频这里精品99香蕉</a>| <a href="http://www-35777.com" target="_blank">欧美日韩在线观看一区二区三区</a>| <a href="http://sdsptl.com" target="_blank">国产手机视频精品</a>| <a href="http://www-kkjj88.com" target="_blank">一本综合精品</a>| <a href="http://988tz.com" target="_blank">蜜臀av在线播放一区二区三区 </a>| <a href="http://4399360.com" target="_blank">91久久久在线</a>| <a href="http://456kp.com" target="_blank">欧美在线综合</a>| <a href="http://312012.com" target="_blank">亚洲欧洲精品一区二区</a>| <a href="http://3314133.com" target="_blank">亚洲男女自偷自拍</a>| <a href="http://868482.com" target="_blank">欧美日韩亚洲一区二区三区四区</a>| <a href="http://92ebook.com" target="_blank">国产农村妇女毛片精品久久麻豆</a>| <a href="http://p54y.com" target="_blank">亚洲乱亚洲高清</a>| <a href="http://fc3332.com" target="_blank">美女黄色成人网</a>| <a href="http://sz-changrong.com" target="_blank">欧美日韩国产综合视频在线观看中文</a>| <a href="http://bkksd.com" target="_blank">一区视频在线</a>| <a href="http://yzxq520.com" target="_blank">久久精视频免费在线久久完整在线看</a>| <a href="http://ythbhg.com" target="_blank">久久久久网址</a>| <a href="http://337105.com" target="_blank">久久精品国产999大香线蕉</a>| <a href="http://yzsss.com" target="_blank">国产欧美日韩中文字幕在线</a>| <a href="http://yashikeji.com" target="_blank">91久久精品国产91久久</a>| <a href="http://555415.com" target="_blank">久久精品成人</a>| <a href="http://3333347.com" target="_blank">亚洲欧美日韩精品一区二区</a>| <a href="http://hzdss.com" target="_blank">欧美日韩精品免费观看视一区二区</a>| <a href="http://4tobi.com" target="_blank">亚洲欧洲在线观看</a>| <a href="http://342889.com" target="_blank">欧美电影在线免费观看网站 </a>| <a href="http://my17677.com" target="_blank">欧美日韩国产精品一卡</a>| <a href="http://yashikeji.com" target="_blank">亚洲高清视频中文字幕</a>| <a href="http://81plas.com" target="_blank">久久精品理论片</a>| <a href="http://605054.com" target="_blank">久久精品青青大伊人av</a>| <a href="http://www24822.com" target="_blank">国产一区二区精品丝袜</a>| <a href="http://www-440447.com" target="_blank">久久爱91午夜羞羞</a>| <a href="http://5mcm.com" target="_blank">久久久久久久久久看片</a>| <a href="http://quoviajes.com" target="_blank">精品9999</a>| <a href="http://by1422.com" target="_blank">亚洲成人在线网站</a>| <a href="http://heshundadi.com" target="_blank">欧美激情亚洲精品</a>| <a href="http://www47011.com" target="_blank">日韩写真视频在线观看</a>| <a href="http://dailymailnepal.com" target="_blank">亚洲精品国产精品国自产观看浪潮</a>| <a href="http://3374com.com" target="_blank">老司机午夜精品</a>| <a href="http://yp77741.com" target="_blank">亚洲国产清纯</a>| <a href="http://yymh1056.com" target="_blank">99国产精品视频免费观看一公开</a>| <a href="http://jqnyc.com" target="_blank">欧美另类一区</a>| <a href="http://ategpu.com" target="_blank">亚洲女同精品视频</a>| <a href="http://mishangmi.com" target="_blank">欧美综合国产精品久久丁香</a>| <a href="http://86808a.com" target="_blank">激情综合在线</a>| <a href="http://xxdd51.com" target="_blank">亚洲国产精品一区制服丝袜</a>| <a href="http://iacapmm.com" target="_blank">欧美日韩精品二区第二页</a>| <a href="http://72avav.com" target="_blank">亚洲欧美日韩国产成人精品影院</a>| <a href="http://gzxyh88.com" target="_blank">蜜桃av一区二区在线观看</a>| <a href="http://b46n.com" target="_blank">亚洲伊人一本大道中文字幕</a>| <a href="http://love136.com" target="_blank">中文精品视频</a>| <a href="http://lyminghang.com" target="_blank">国产精品久久久亚洲一区</a>| <a href="http://jlkcjz.com" target="_blank">亚洲自拍偷拍视频</a>| <a href="http://22400com.com" target="_blank">欧美一区二区三区日韩视频</a>| <a href="http://9511331.com" target="_blank">国语精品中文字幕</a>| <a href="http://486be.com" target="_blank">欧美亚洲在线视频</a>| <a href="http://www-74987.com" target="_blank">久久嫩草精品久久久精品</a>| <a href="http://www-888690.com" target="_blank">日韩一区二区电影网</a>| <a href="http://287975.com" target="_blank">一区二区精品在线</a>| <a href="http://noeljgq.com" target="_blank">国产精品高清免费在线观看</a>| <a href="http://57sa.com" target="_blank">久久久久久精</a>| <a href="http://844985.com" target="_blank">国产精品99一区二区</a>| <a href="http://916969.com" target="_blank">欧美在线观看视频在线 </a>| <a href="http://2061375.com" target="_blank">久久深夜福利</a>| <a href="http://jkllkg.com" target="_blank">欧美激情精品久久久久久黑人 </a>| <a href="http://hy8r.com" target="_blank">亚洲美女黄色</a>| <a href="http://actinview.com" target="_blank">国内成人自拍视频</a>| <a href="http://www474000c.com" target="_blank">亚洲第一区在线观看</a>| <a href="http://wanshunpu.com" target="_blank">欧美日韩国产一区二区三区</a>| <a href="http://337791.com" target="_blank">久久久国产精品一区</a>| <a href="http://436212.com" target="_blank">欧美www在线</a>| <a href="http://g2000vip.com" target="_blank">香蕉成人久久</a>| <a href="http://4080sy.com" target="_blank">久久亚洲一区二区三区四区</a>| <a href="http://7885888.com" target="_blank">亚洲一区观看</a>| <a href="http://avsemm.com" target="_blank">久久精品国产在热久久</a>| <a href="http://4c7175.com" target="_blank">99在线精品免费视频九九视</a>| <a href="http://qcjpns.com" target="_blank">午夜激情综合网</a>| <a href="http://zjjieda.com" target="_blank">91久久在线视频</a>| <a href="http://402626com.com" target="_blank">亚洲淫片在线视频</a>| <a href="http://analemi.com" target="_blank">日韩视频精品在线观看</a>| <a href="http://www123hao.com" target="_blank">欧美伊人久久久久久久久影院 </a>| <a href="http://621939.com" target="_blank">亚洲一区免费网站</a>| <a href="http://qqszdq.com" target="_blank">欧美在线视频一区二区三区</a>| <a href="http://mmmm37.com" target="_blank">一区二区成人精品</a>| <a href="http://www930666.com" target="_blank">久久免费观看视频</a>| <a href="http://xpfuli.com" target="_blank">午夜一区在线</a>| <a href="http://69ru.com" target="_blank">欧美午夜a级限制福利片</a>| <a href="http://myav2.com" target="_blank">欧美国产三级</a>| <a href="http://e7w2.com" target="_blank">亚洲国产成人91精品</a>| <a href="http://njhuike.com" target="_blank">欧美影院视频</a>| <a href="http://www55747.com" target="_blank">欧美一区二区啪啪</a>| <a href="http://xb735.com" target="_blank">国产精品久久久久久亚洲调教</a>| <a href="http://345kt.com" target="_blank">亚洲国产日韩一区</a>| <a href="http://joy-learn.com" target="_blank">樱桃视频在线观看一区</a>| <a href="http://hczztj.com" target="_blank">久久国产精彩视频</a>| <a href="http://yyy922.com" target="_blank">久久精品在线播放</a>| <a href="http://aass123.com" target="_blank">国产精品自在线</a>| <a href="http://y65y.com" target="_blank">午夜精品av</a>| <a href="http://bjmrkj.com" target="_blank">欧美一区二区观看视频</a>| <a href="http://vipaqdx29.com" target="_blank">国产欧美日本一区二区三区</a>| <a href="http://wwwq4yy.com" target="_blank">日韩亚洲综合在线</a>| <a href="http://hhsp13.com" target="_blank">日韩视频免费看</a>| <a href="http://buyiker.com" target="_blank">欧美日本韩国</a>| <a href="http://7504329.com" target="_blank">亚洲人成网站精品片在线观看</a>| <a href="http://327099.com" target="_blank">在线成人激情黄色</a>| <a href="http://yyy922.com" target="_blank">美女免费视频一区</a>| <a href="http://bjrailtech.com" target="_blank">久久精品视频99</a>| <a href="http://9885888.com" target="_blank">欧美亚洲一区三区</a>| <a href="http://036762.com" target="_blank">黄色国产精品一区二区三区</a>| <a href="http://32tun.com" target="_blank">亚洲图片欧洲图片av</a>| <a href="http://zxxx3.com" target="_blank">亚洲私人影吧</a>| <a href="http://buyiker.com" target="_blank">国产精品影片在线观看</a>| <a href="http://mm-777.com" target="_blank">一区二区三区福利</a>| <a href="http://69ru.com" target="_blank">亚洲综合色婷婷</a>| <a href="http://xindefalv.com" target="_blank">国产精品久久9</a>| <a href="http://dy123456.com" target="_blank">99国产精品久久久久老师 </a>| <a href="http://798200.com" target="_blank">欧美国内亚洲</a>| <a href="http://04oy.com" target="_blank">亚洲高清电影</a>| <a href="http://jilcool.com" target="_blank">亚洲精品日产精品乱码不卡</a>| <a href="http://yichenep.com" target="_blank">欧美大片在线观看</a>| <a href="http://329374.com" target="_blank">99综合精品</a>| <a href="http://uuuu79.com" target="_blank">午夜日韩电影</a>| <a href="http://eshop999.com" target="_blank">国产视频一区在线观看一区免费</a>| <a href="http://yahuake.com" target="_blank">欧美一级片在线播放</a>| <a href="http://7782y.com" target="_blank">久色婷婷小香蕉久久</a>| <a href="http://whaylan.com" target="_blank">在线观看精品一区</a>| <a href="http://114mz.com" target="_blank">欧美日韩一区二区视频在线</a>| <a href="http://qibilly.com" target="_blank">亚洲男人的天堂在线观看</a>| <a href="http://1323123.com" target="_blank">老司机免费视频一区二区</a>| <a href="http://y65y.com" target="_blank">亚洲品质自拍</a>| <a href="http://1zz8903.com" target="_blank">欧美日韩综合网</a>| <a href="http://4884888.com" target="_blank">欧美在线免费播放</a>| <a href="http://haoa009.com" target="_blank">亚洲国产专区校园欧美</a>| <a href="http://www47011.com" target="_blank">亚洲一区二区三区在线观看视频</a>| <a href="http://yw-95588.com" target="_blank">国产精品jizz在线观看美国</a>| <a href="http://www8888803.com" target="_blank">性欧美暴力猛交69hd</a>| <a href="http://9238479.com" target="_blank">欧美成人一二三</a>| <a href="http://wwwhhh396.com" target="_blank">午夜久久99</a>| <a href="http://1313js.com" target="_blank">亚洲第一毛片</a>| <a href="http://www50050.com" target="_blank">欧美午夜寂寞影院</a>| <a href="http://xhtd688.com" target="_blank">久久久99免费视频</a>| <a href="http://yiapk.com" target="_blank">欧美激情一区二区三区蜜桃视频</a>| <a href="http://1000kongbao.com" target="_blank">在线一区亚洲</a>| <a href="http://yzxq520.com" target="_blank">亚洲激情二区</a>| <a href="http://korean-edu.com" target="_blank">国产网站欧美日韩免费精品在线观看 </a>| <a href="http://iotbzw.com" target="_blank">夜夜爽99久久国产综合精品女不卡 </a>| <a href="http://www31931.com" target="_blank">亚洲国产免费</a>| <a href="http://www-44899.com" target="_blank">国产精品久久久久久久9999</a>| <a href="http://ju255.com" target="_blank">久久噜噜噜精品国产亚洲综合 </a>| <a href="http://848585.com" target="_blank">欧美一进一出视频</a>| <a href="http://669528.com" target="_blank">99国产精品</a>| <a href="http://maokk77.com" target="_blank">亚洲成人资源网</a>| <a href="http://92ye.com" target="_blank">国产精品资源在线观看</a>| <a href="http://8x588.com" target="_blank">欧美激情综合五月色丁香小说</a>| <a href="http://yw1396.com" target="_blank">日韩亚洲精品视频</a>| <a href="http://689558.com" target="_blank">欧美成人综合</a>| <a href="http://4534com.com" target="_blank">午夜精品久久99蜜桃的功能介绍</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>