鏋勯犳柟娉?/div>
鍚姩鏈嶅姟StartService
鍋滄鏈嶅姟StopService
鐢寵 GetConnectionFormPool
閲婃斁DisposeConnection
濡備綍鏇存柊灞炴?/font>
濡備綍紜畾榪炴帴鏄惁澶辨晥
浣跨敤綰跨▼綆$悊榪炴帴姹?/font>
threadCreate
threadCheck
寮曡█
涓鑸殑鏁版嵁搴撳簲鐢ㄧ▼搴忓ぇ鑷撮兘閬靛驚涓嬮潰鐨勬楠?
鍒濆鍖栫▼搴?/font>
鐢ㄦ埛鍦║I涓婅緭鍏ユ搷浣?/font>
鐢辯敤鎴鋒搷浣滀駭鐢熸暟鎹簱鎿嶄綔
灝嗘暟鎹簱鎿嶄綔閫掍氦鍒版暟鎹簱鏈嶅姟鍣?/font>
.... (閲嶅2~4)
鍏抽棴搴旂敤紼嬪簭
銆銆鑰屾湰鏂囧垯鐫閲嶈瑙d笂闈㈢4 姝ラ.鍦ㄧ潃涓姝ラ涓垜浠粡甯告槸,鎵撳紑鏁版嵁搴撹繛鎺ユ搷浣滄暟鎹簱,鏈鍚庡叧闂暟鎹簱. 銆銆鍦ㄦ湇鍔″櫒绔▼搴忚璁′笂涓庢暟鎹簱鐨勬搷浣滄樉寰楀崄鍒嗛噸瑕?鍥犱負浣犺澶勭悊鐨勬暟鎹搷浣滃崄鍒嗗法澶?濡傛灉棰戠箒鍒涘緩鏁版嵁搴撹繛鎺ラ綣佸叧闂暟鎹簱榪炴帴鍒欎細寮曡搗鏁堢巼浣庝笅鐢氳嚦寮曞彂紼嬪簭宕╂簝. 銆銆涔熻鎴戜滑鍙互鏈夊彟涓縐嶆搷浣滄暟鎹簱鐨勫艦寮?鎴戜滑鍙互鍦ㄧ▼搴忚繍琛屾椂鎵撳紑涓涓暟鎹簱榪炴帴,璁╄繖涓繛鎺ユ案涔呭瓨鍦ㄧ洿鍒扮▼搴?姝諱骸',閭d箞榪欐牱鍋氫篃鏈変笉瀹夊叏闅愭偅,鎴戜滑鐭ラ亾涓涓璞″瓨鍦ㄦ椂闂磋秺闀挎垨琚嬌鐢ㄦ鏁拌秺澶氬垯瀹冭〃鐜扮殑瓚婁笉紼沖畾,鐫涓嶇ǔ瀹氬洜绱犳槸鐢變簬瀵硅薄鍐呴儴鍙兘瀛樺湪鐨勬綔鍦ㄨ璁¢棶棰樹駭鐢?瀵逛簬鏁版嵁搴撹繛鎺ュ璞¢亾鐞嗕篃涓鏍?鎴戜滑涓嶈兘淇濊瘉涓涓狢onnection瀵硅薄閲岄潰鑳戒竴鐐歸棶棰樹笉瀛樺湪.鎵浠ユ垜浠篃涓嶆暍闀挎椂闂村皢瀹冮暱鏃墮棿鍗犵敤鍐呭瓨. 銆銆鏃㈢劧鏈夎繖涔堝鐨勯棶棰樼敱姝ゆ垜浠渶瑕佷竴涓兘甯垜浠淮鎶ゆ暟鎹簱榪炴帴鐨勪笢瑗?瀹冨氨鏄?font color=#ff0000>榪炴帴姹?/font>,緗戜笂鏈夊緢澶氱殑榪炴帴姹犱緥瀛?浣嗘槸澶氭暟閮芥槸綆鍗曠殑渚嬪瓙,鎴栬呬粙緇嶆瘮杈冨鏉傜殑榪炴帴姹犲師鐞?娌℃湁涓涓瘮杈冨畬鏁翠粙緇嶅拰瀹炵幇榪炴帴姹犵殑渚嬪瓙.榪欓噷灝變粙緇嶄綘濡備綍鑷繁鍒朵綔涓涓繛鎺ユ睜. 銆銆瀵逛簬鍏變韓璧勬簮錛屾湁涓涓緢钁楀悕鐨勮璁℃ā寮忥細璧勬簮姹狅紙Resource Pool錛夈傝妯″紡姝f槸涓轟簡瑙e喅璧勬簮鐨勯綣佸垎閰嶏箲閲婃斁鎵閫犳垚鐨勯棶棰樸備負瑙e喅鎴戜滑鐨勯棶棰橈紝鍙互閲囩敤鏁版嵁搴撹繛鎺ユ睜鎶鏈傛暟鎹簱榪炴帴姹犵殑鍩烘湰鎬濇兂灝辨槸涓烘暟鎹簱榪炴帴寤虹珛涓涓?#8220;緙撳啿姹?#8221;銆傞鍏堝湪緙撳啿姹犱腑鏀懼叆涓瀹氭暟閲忕殑榪炴帴錛屽綋闇瑕佸緩绔嬫暟鎹簱榪炴帴鏃訛紝鍙渶浠?#8220;緙撳啿姹?#8221;涓彇鍑轟竴涓紝浣跨敤瀹屾瘯涔嬪悗鍐嶆斁鍥炲幓銆傛垜浠彲浠ラ氳繃璁懼畾榪炴帴姹犳渶澶ц繛鎺ユ暟鏉ラ槻姝㈢郴緇熸棤灝界殑涓庢暟鎹簱榪炴帴銆傛洿涓洪噸瑕佺殑鏄垜浠彲浠ラ氳繃榪炴帴姹犵殑綆$悊鏈哄埗鐩戣鏁版嵁搴撶殑榪炴帴鐨勬暟閲忥箲浣跨敤鎯呭喌錛屼負緋葷粺寮鍙戯箲嫻嬭瘯鍙婃ц兘璋冩暣鎻愪緵渚濇嵁銆傝繛鎺ユ睜鐨勫熀鏈伐浣滃師鐞嗚涓嬪浘銆?/font>
鏁版嵁搴撹繛鎺ユ睜錛圕onnection Pool錛夌殑宸ヤ綔鍘熺悊
榪炴帴姹犲叧閿棶棰樺垎鏋?/font>
銆銆1銆佸茍鍙戦棶棰?/font>
銆銆涓轟簡浣胯繛鎺ョ鐞嗘湇鍔″叿鏈夋渶澶х殑閫氱敤鎬э紝蹇呴』鑰冭檻澶氱嚎紼嬬幆澧冿紝鍗沖茍鍙戦棶棰樸傝繖涓棶棰樼浉瀵規瘮杈冨ソ瑙e喅錛屽洜涓哄悇涓璦鑷韓鎻愪緵浜嗗騫跺彂綆$悊鐨勬敮鎸佸儚java,c#絳夌瓑錛屼嬌鐢╯ynchronized(java)lock(C#)鍏抽敭瀛楀嵆鍙‘淇濈嚎紼嬫槸鍚屾鐨勩備嬌鐢ㄦ柟娉曞彲浠ュ弬鑰冿紝鐩稿叧鏂囩尞銆?/font>
銆銆錛掋佷簨鍔″鐞?/font>
銆銆鎴戜滑鐭ラ亾錛屼簨鍔″叿鏈夊師瀛愭э紝姝ゆ椂瑕佹眰瀵規暟鎹簱鐨勬搷浣滅鍚?#8220;ALL-ALL-NOTHING”鍘熷垯,鍗沖浜庝竴緇凷QL璇彞瑕佷箞鍏ㄥ仛錛岃涔堝叏涓嶅仛銆?br> 銆銆鎴戜滑鐭ラ亾褰擄紥涓嚎紼嬪叕鐢ㄤ竴涓繛鎺onnection瀵硅薄錛岃屼笖鍚勮嚜閮芥湁鑷繁鐨勪簨鍔¤澶勭悊鏃跺欙紝瀵逛簬榪炴帴姹犳槸涓涓緢澶寸柤鐨勯棶棰橈紝鍥犱負鍗充嬌Connection綾繪彁渚涗簡鐩稿簲鐨勪簨鍔℃敮鎸侊紝鍙槸鎴戜滑浠嶇劧涓嶈兘紜畾閭d釜鏁版嵁搴撴搷浣滄槸瀵瑰簲閭d釜浜嬪姟鐨勶紝榪欐槸鐢變簬鎴戜滑鏈夛紥涓嚎紼嬮兘鍦ㄨ繘琛屼簨鍔℃搷浣滆屽紩璧風殑銆備負姝ゆ垜浠彲浠ヤ嬌鐢?/font>姣忎竴涓簨鍔$嫭鍗犱竴涓繛鎺ユ潵瀹炵幇錛岃櫧鐒惰繖縐嶆柟娉曟湁鐐規氮璐硅繛鎺ユ睜璧勬簮浣嗘槸鍙互澶уぇ闄嶄綆浜嬪姟綆$悊鐨勫鏉傛с?/font>
銆銆錛撱佽繛鎺ユ睜鐨勫垎閰嶄笌閲婃斁
銆銆榪炴帴姹犵殑鍒嗛厤涓庨噴鏀撅紝瀵圭郴緇熺殑鎬ц兘鏈夊緢澶х殑褰卞搷銆傚悎鐞嗙殑鍒嗛厤涓庨噴鏀撅紝鍙互鎻愰珮榪炴帴鐨勫鐢ㄥ害錛屼粠鑰岄檷浣庡緩绔嬫柊榪炴帴鐨勫紑閿錛屽悓鏃惰繕鍙互鍔犲揩鐢ㄦ埛鐨勮闂熷害銆?br> 銆銆瀵逛簬榪炴帴鐨勭鐞嗗彲浣跨敤涓涓狶ist銆傚嵆鎶婂凡緇忓垱寤虹殑榪炴帴閮芥斁鍏ist涓幓緇熶竴綆$悊銆傛瘡褰撶敤鎴瘋姹備竴涓繛鎺ユ椂錛岀郴緇熸鏌ヨ繖涓狶ist涓湁娌℃湁鍙互鍒嗛厤鐨勮繛鎺ャ傚鏋滄湁灝辨妸閭d釜鏈鍚堥傜殑榪炴帴鍒嗛厤緇欎粬錛堝浣曡兘鎵懼埌鏈鍚堥傜殑榪炴帴鏂囩珷灝嗗湪鍏抽敭璁涓寚鍑?/font>錛夛紱濡傛灉娌℃湁灝辨姏鍑轟竴涓紓甯哥粰鐢ㄦ埛錛孡ist涓繛鎺ユ槸鍚﹀彲浠ヨ鍒嗛厤鐢變竴涓嚎紼嬫潵涓撻棬綆$悊鎹庡悗鎴戜細浠嬬粛榪欎釜綰跨▼鐨勫叿浣撳疄鐜般?
銆銆錛斻佽繛鎺ユ睜鐨勯厤緗笌緇存姢
銆銆榪炴帴姹犱腑鍒板簳搴旇鏀劇疆澶氬皯榪炴帴錛屾墠鑳戒嬌緋葷粺鐨勬ц兘鏈浣籌紵緋葷粺鍙噰鍙栬緗渶灝忚繛鎺ユ暟錛坢inConnection錛夊拰鏈澶ц繛鎺ユ暟錛坢axConnection錛夌瓑鍙傛暟鏉ユ帶鍒惰繛鎺ユ睜涓殑榪炴帴銆傛瘮鏂硅錛屾渶灝忚繛鎺ユ暟鏄郴緇熷惎鍔ㄦ椂榪炴帴姹犳墍鍒涘緩鐨勮繛鎺ユ暟銆傚鏋滃垱寤鴻繃澶氾紝鍒欑郴緇熷惎鍔ㄥ氨鎱紝浣嗗垱寤哄悗緋葷粺鐨勫搷搴旈熷害浼氬緢蹇紱濡傛灉鍒涘緩榪囧皯錛屽垯緋葷粺鍚姩鐨勫緢蹇紝鍝嶅簲璧鋒潵鍗存參銆傝繖鏍鳳紝鍙互鍦ㄥ紑鍙戞椂錛岃緗緝灝忕殑鏈灝忚繛鎺ユ暟錛屽紑鍙戣搗鏉ヤ細蹇紝鑰屽湪緋葷粺瀹為檯浣跨敤鏃惰緗緝澶х殑錛屽洜涓鴻繖鏍峰璁塊棶瀹㈡埛鏉ヨ閫熷害浼氬揩浜涖傛渶澶ц繛鎺ユ暟鏄繛鎺ユ睜涓厑璁歌繛鎺ョ殑鏈澶ф暟鐩紝鍏蜂綋璁劇疆澶氬皯錛岃鐪嬬郴緇熺殑璁塊棶閲忥紝鍙氳繃杞歡闇姹備笂寰楀埌銆?br> 銆銆濡備綍紜繚榪炴帴姹犱腑鐨勬渶灝忚繛鎺ユ暟鍛紵鏈夊姩鎬佸拰闈欐佷袱縐嶇瓥鐣ャ傚姩鎬佸嵆姣忛殧涓瀹氭椂闂村氨瀵硅繛鎺ユ睜榪涜媯嫻嬶紝濡傛灉鍙戠幇榪炴帴鏁伴噺灝忎簬鏈灝忚繛鎺ユ暟錛屽垯琛ュ厖鐩稿簲鏁伴噺鐨勬柊榪炴帴,浠ヤ繚璇佽繛鎺ユ睜鐨勬甯歌繍杞傞潤鎬佹槸鍙戠幇絀洪棽榪炴帴涓嶅鏃跺啀鍘繪鏌ャ?
]]>
[MSDN]浣跨敤榪炴帴姹?/title> http://m.shnenglu.com/xushaohua/archive/2007/12/21/39171.htmlneter neter Thu, 20 Dec 2007 17:33:00 GMT http://m.shnenglu.com/xushaohua/archive/2007/12/21/39171.html http://m.shnenglu.com/xushaohua/comments/39171.html http://m.shnenglu.com/xushaohua/archive/2007/12/21/39171.html#Feedback 0 http://m.shnenglu.com/xushaohua/comments/commentRss/39171.html http://m.shnenglu.com/xushaohua/services/trackbacks/39171.html 浣跨敤榪炴帴姹?!---->
榪炴帴鍒版暟鎹簱鏈嶅姟鍣ㄩ氬父鐢卞嚑涓渶瑕佸緢闀挎椂闂寸殑姝ラ緇勬垚銆傚繀欏誨緩绔嬬墿鐞嗛氶亾錛堜緥濡傚鎺ュ瓧鎴栧懡鍚嶇閬擄級錛屽繀欏諱笌鏈嶅姟鍣ㄨ繘琛屽垵嬈℃彙鎵嬶紝蹇呴』鍒嗘瀽榪炴帴瀛楃涓蹭俊鎭紝蹇呴』鐢辨湇鍔″櫒瀵硅繛鎺ヨ繘琛岃韓浠介獙璇侊紝蹇呴』榪愯媯鏌ヤ互渚垮湪褰撳墠浜嬪姟涓櫥璁幫紝絳夌瓑銆?
瀹為檯涓婏紝澶у鏁板簲鐢ㄧ▼搴忎粎浣跨敤涓涓垨鍑犱釜涓嶅悓鐨勮繛鎺ラ厤緗傝繖鎰忓懗鐫鍦ㄦ墽琛屽簲鐢ㄧ▼搴忔湡闂達紝璁稿鐩稿悓鐨勮繛鎺ュ皢鍙嶅鍦版墦寮鍜屽叧闂備負浜嗕嬌鎵撳紑鐨勮繛鎺ユ垚鏈渶浣庯紝ADO.NET 浣跨敤縐頒負榪炴帴姹?/em>鐨勪紭鍖栨柟娉曘?/p>
榪炴帴姹犲噺灝戞柊榪炴帴闇瑕佹墦寮鐨勬鏁般?em>姹犺繘紼?/em>淇濇寔鐗╃悊榪炴帴鐨勬墍鏈夋潈銆傞氳繃涓烘瘡涓粰瀹氱殑榪炴帴閰嶇疆淇濈暀涓緇勬椿鍔ㄨ繛鎺ユ潵綆$悊榪炴帴銆傚彧瑕佺敤鎴峰湪榪炴帴涓婅皟鐢?Open錛屾睜榪涚▼灝變細媯鏌ユ睜涓槸鍚︽湁鍙敤鐨勮繛鎺ャ傚鏋滄煇涓睜榪炴帴鍙敤錛屼細灝嗚榪炴帴榪斿洖緇欒皟鐢ㄨ咃紝鑰屼笉鏄墦寮鏂拌繛鎺ャ傚簲鐢ㄧ▼搴忓湪璇ヨ繛鎺ヤ笂璋冪敤 Close 鏃訛紝姹犺繘紼嬩細灝嗚繛鎺ヨ繑鍥炲埌媧誨姩榪炴帴姹犻泦涓紝鑰屼笉鏄湡姝e叧闂繛鎺ャ傝繛鎺ヨ繑鍥炲埌姹犱腑涔嬪悗錛屽嵆鍙湪涓嬩竴涓?Open 璋冪敤涓噸澶嶄嬌鐢ㄣ?/p>
鍙湁閰嶇疆鐩稿悓鐨勮繛鎺ュ彲浠ュ緩绔嬫睜榪炴帴銆侫DO.NET 鍚屾椂淇濈暀澶氫釜姹狅紝姣忎釜閰嶇疆涓涓睜銆傝繛鎺ョ敱榪炴帴瀛楃涓蹭互鍙?Windows 鏍囪瘑錛堝湪浣跨敤闆嗘垚鐨勫畨鍏ㄦф椂錛夊垎涓哄涓睜銆?/p>
姹犺繛鎺ュ彲浠ュぇ澶ф彁楂樺簲鐢ㄧ▼搴忕殑鎬ц兘鍜屽彲緙╂斁鎬с傞粯璁ゆ儏鍐典笅錛孉DO.NET 涓惎鐢ㄨ繛鎺ユ睜銆傞櫎闈炴樉寮忕鐢紝鍚﹀垯錛岃繛鎺ュ湪搴旂敤紼嬪簭涓墦寮鍜屽叧闂椂錛屾睜榪涚▼灝嗗榪炴帴榪涜浼樺寲銆傝繕鍙互鎻愪緵鍑犱釜榪炴帴瀛楃涓蹭慨楗扮鏉ユ帶鍒惰繛鎺ユ睜鐨勮涓恒傛湁鍏蟲洿澶氫俊鎭紝璇峰弬瑙佹湰涓婚鍚庨潰鐨?#8220;浣跨敤榪炴帴瀛楃涓插叧閿瓧鎺у埗榪炴帴姹?#8221;銆?/p>
姹犵殑鍒涘緩鍜屽垎閰?/h1>
鍦ㄥ垵嬈℃墦寮榪炴帴鏃訛紝灝嗘牴鎹畬鍏ㄥ尮閰嶇畻娉曞垱寤鴻繛鎺ユ睜錛岃綆楁硶灝嗘睜涓庤繛鎺ヤ腑鐨勮繛鎺ュ瓧絎︿覆鍏寵仈銆傛瘡涓繛鎺ユ睜涓庝笉鍚岀殑榪炴帴瀛楃涓插叧鑱斻傛墦寮鏂拌繛鎺ユ椂錛屽鏋滆繛鎺ュ瓧絎︿覆騫墮潪涓庣幇鏈夋睜瀹屽叏鍖歸厤錛屽皢鍒涘緩涓涓柊姹犮傛寜榪涚▼銆佹寜搴旂敤紼嬪簭鍩熴佹寜榪炴帴瀛楃涓蹭互鍙婏紙鍦ㄤ嬌鐢ㄩ泦鎴愮殑瀹夊叏鎬ф椂錛夋寜 Windows 鏍囪瘑鏉ュ緩绔嬫睜榪炴帴銆?/p>
鍦ㄤ互涓?C# 紺轟緥涓垱寤轟簡涓変釜鏂扮殑 SqlConnection 瀵硅薄錛屼絾鏄鐞嗘椂鍙渶瑕佷袱涓繛鎺ユ睜銆傛敞鎰忥紝鏍規嵁涓?Initial Catalog 鍒嗛厤鐨勫鹼紝絎竴涓拰絎簩涓繛鎺ュ瓧絎︿覆鏈夋墍涓嶅悓銆?/p>
using (SqlConnection connection = new SqlConnection(
"Integrated Security=SSPI;Initial Catalog=Northwind"))
{
connection.Open();
// Pool A is created.
}
using (SqlConnection connection = new SqlConnection(
"Integrated Security=SSPI;Initial Catalog=pubs"))
{
connection.Open();
// Pool B is created because the connection strings differ.
}
using (SqlConnection connection = new SqlConnection(
"Integrated Security=SSPI;Initial Catalog=Northwind"))
{
connection.Open();
// The connection string matches pool A.
}
濡傛灉 MinPoolSize 鍦ㄨ繛鎺ュ瓧絎︿覆涓湭鎸囧畾鎴栨寚瀹氫負闆訛紝姹犱腑鐨勮繛鎺ュ皢鍦ㄤ竴孌墊椂闂翠笉媧誨姩鍚庡叧闂備絾鏄紝濡傛灉鎸囧畾鐨?MinPoolSize 澶т簬闆訛紝鍦?AppDomain 琚嵏杞藉茍涓旇繘紼嬬粨鏉熶箣鍓嶏紝榪炴帴姹犱笉浼氳鐮村潖銆傞潪媧誨姩鎴栫┖姹犵殑緇存姢鍙渶瑕佹渶灝戠殑緋葷粺寮閿銆?/p>
娉ㄦ剰
濡傛灉鍙戠敓鑷村懡閿欒錛堜緥濡傛晠闅滆漿縐繪垨娉ㄥ唽琛ㄤ腑鐨勫埆鍚嶆洿鏀癸級錛屾睜灝嗚嚜鍔ㄦ竻闄ゃ?/p>
娣誨姞榪炴帴
榪炴帴姹犳槸涓烘瘡涓敮涓鐨勮繛鎺ュ瓧絎︿覆鍒涘緩鐨勩傚綋鍒涘緩涓涓睜鍚庯紝灝嗗垱寤哄涓繛鎺ュ璞″茍灝嗗叾娣誨姞鍒拌姹犱腑錛屼互婊¤凍鏈灝忔睜澶у皬鐨勮姹傘傝繛鎺ユ牴鎹渶瑕佹坊鍔犲埌姹犱腑錛屼絾鏄笉鑳借秴榪囨寚瀹氱殑鏈澶ф睜澶у皬錛堥粯璁ゅ間負 100錛夈傝繛鎺ュ湪鍏抽棴鎴栨柇寮鏃墮噴鏀懼洖姹犱腑銆?
鍦ㄨ姹?SqlConnection 瀵硅薄鏃訛紝濡傛灉瀛樺湪鍙敤鐨勮繛鎺ワ紝灝嗕粠姹犱腑鑾峰彇璇ュ璞°傝繛鎺ヨ鍙敤錛屽繀欏繪湭浣跨敤錛屽叿鏈夊尮閰嶇殑浜嬪姟涓婁笅鏂囨垨鏈笌浠諱綍浜嬪姟涓婁笅鏂囧叧鑱旓紝騫朵笖鍏鋒湁涓庢湇鍔″櫒鐨勬湁鏁堥摼鎺ャ?/p>
榪炴帴姹犺繘紼嬮氳繃鍦ㄨ繛鎺ラ噴鏀懼洖姹犱腑鏃墮噸鏂板垎閰嶈繛鎺ワ紝鏉ユ弧瓚寵繖浜涜繛鎺ヨ姹傘傚鏋滃凡杈懼埌鏈澶ф睜澶у皬涓斾笉瀛樺湪鍙敤鐨勮繛鎺ワ紝鍒欒璇鋒眰灝嗕細鎺掗槦銆傜劧鍚庯紝姹犺繘紼嬪皾璇曢噸鏂板緩绔嬩換浣曡繛鎺ワ紝鐩村埌鍒拌揪瓚呮椂鏃墮棿錛堥粯璁ゅ間負 15 縐掞級銆傚鏋滄睜榪涚▼鍦ㄨ繛鎺ヨ秴鏃朵箣鍓嶆棤娉曟弧瓚寵姹傦紝灝嗗紩鍙戝紓甯搞?
璀﹀憡
鎴戜滑寤鴻鎮ㄥ湪浣跨敤瀹岃繛鎺ユ椂涓瀹氳鍏抽棴榪炴帴錛屼互渚胯繛鎺ュ彲浠ヨ繑鍥炴睜銆傝鍏抽棴榪炴帴錛屽彲浠ヤ嬌鐢?Connection 瀵硅薄鐨?Close 鎴?Dispose 鏂規硶錛屼篃鍙互閫氳繃鍦?C# 鐨?using 璇彞涓垨鍦?Visual Basic 鐨?Using 璇彞涓墦寮鎵鏈夎繛鎺ャ備笉鏄樉寮忓叧闂殑榪炴帴鍙兘涓嶄細娣誨姞鎴栬繑鍥炲埌姹犱腑銆備緥濡傦紝濡傛灉榪炴帴宸茶秴鍑鴻寖鍥翠絾娌℃湁鏄懼紡鍏抽棴錛屽垯浠呭綋杈懼埌鏈澶ф睜澶у皬鑰岃榪炴帴浠嶇劧鏈夋晥鏃訛紝璇ヨ繛鎺ユ墠浼氳繑鍥炲埌榪炴帴姹犱腑銆傛湁鍏蟲洿澶氫俊鎭紝璇峰弬瑙?Visual Basic 鐨?a id=ctl00_rs1_mainContentContainer_ctl03 onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl03',this);" tabIndex=0 >using 璇彞錛圕# 鍙傝冿級 鎴?a id=ctl00_rs1_mainContentContainer_ctl04 onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl04',this);" tabIndex=0 >濡備綍錛氶噴鏀劇郴緇熻祫婧?/font> 銆?/p>
娉ㄦ剰
涓嶈鍦ㄧ被鐨?Finalize 鏂規硶涓 Connection銆丏ataReader 鎴栦換浣曞叾浠栨墭綆″璞¤皟鐢?Close 鎴?Dispose銆傚湪緇堢粨鍣ㄤ腑錛屼粎閲婃斁綾葷洿鎺ユ嫢鏈夌殑闈炴墭綆¤祫婧愩傚鏋滅被涓嶆嫢鏈変換浣曢潪鎵樼璧勬簮錛屽垯涓嶈鍦ㄧ被瀹氫箟涓寘鍚?Finalize 鏂規硶銆傛湁鍏蟲洿澶氫俊鎭紝璇峰弬瑙?a id=ctl00_rs1_mainContentContainer_ctl05 onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl05',this);" tabIndex=0 >鍨冨溇鍥炴敹 銆?/p>
縐婚櫎榪炴帴
榪炴帴姹犺繘紼嬪畾鏈熸壂鎻忚繛鎺ユ睜錛屾煡鎵炬病鏈夐氳繃 Close 鎴?Dispose 鍏抽棴鐨勬湭鐢ㄨ繛鎺ワ紝騫墮噸鏂板緩绔嬫壘鍒扮殑榪炴帴銆傚鏋滃簲鐢ㄧ▼搴忔病鏈夋樉寮忓叧闂垨鏂紑鍏惰繛鎺ワ紝榪炴帴姹犺繘紼嬪彲鑳介渶瑕佸緢闀挎椂闂存墠鑳介噸鏂板緩绔嬭繛鎺ワ紝鎵浠ワ紝鏈濂界‘淇濆湪榪炴帴涓樉寮忚皟鐢?Close 鍜?Dispose銆?/p>
濡傛灉榪炴帴闀挎椂闂寸┖闂詫紝鎴栨睜榪涚▼媯嫻嬪埌涓庢湇鍔″櫒鐨勮繛鎺ュ凡鏂紑錛岃繛鎺ユ睜榪涚▼浼氬皢璇ヨ繛鎺ヤ粠姹犱腑縐婚櫎銆傛敞鎰忥紝鍙湁鍦ㄥ皾璇曚笌鏈嶅姟鍣ㄨ繘琛岄氫俊涔嬪悗鎵嶈兘媯嫻嬪埌鏂紑鐨勮繛鎺ャ傚鏋滃彂鐜版煇榪炴帴涓嶅啀榪炴帴鍒版湇鍔″櫒錛屽垯浼氬皢鍏舵爣璁頒負鏃犳晥銆傛棤鏁堣繛鎺ュ彧鏈夊湪鍏抽棴鎴栭噸鏂板緩绔嬪悗錛屾墠浼氫粠榪炴帴姹犱腑縐婚櫎銆?/p>
濡傛灉瀛樺湪涓庡凡娑堝け鐨勬湇鍔″櫒鐨勮繛鎺ワ紝閭d箞鍗充嬌榪炴帴姹犵鐞嗙▼搴忔湭媯嫻嬪埌宸叉柇寮鐨勮繛鎺ュ茍灝嗗叾鏍囪涓烘棤鏁堬紝浠嶆湁鍙兘灝嗘榪炴帴浠庢睜涓彇鍑恒傝繖縐嶆儏鍐墊槸鍥犱負媯鏌ヨ繛鎺ユ槸鍚︿粛鏈夋晥鐨勭郴緇熷紑閿灝嗛犳垚涓庢湇鍔″櫒鐨勫彟涓嬈″線榪旓紝浠庤屾姷娑堜簡姹犺繘紼嬬殑浼樺娍銆傚彂鐢熸鎯呭喌鏃訛紝鍒濇灝濊瘯浣跨敤璇ヨ繛鎺ュ皢媯嫻嬭繛鎺ユ槸鍚︽浘鏂紑錛屽茍寮曞彂寮傚父銆?/p>
娓呴櫎姹?/h1>
ADO.NET 2.0 寮曞叆浜嗕袱縐嶆柊鐨勬柟娉曟潵娓呴櫎姹狅細ClearAllPools 鍜?ClearPool 銆侰learAllPools 娓呴櫎緇欏畾鎻愪緵紼嬪簭鐨勮繛鎺ユ睜錛孋learPool 娓呴櫎涓庣壒瀹氳繛鎺ュ叧鑱旂殑榪炴帴姹犮傚鏋滃湪璋冪敤鏃惰繛鎺ユ鍦ㄤ嬌鐢紝灝嗚繘琛岀浉搴旂殑鏍囪銆傝繛鎺ュ叧闂椂錛屽皢琚涪寮冿紝鑰屼笉鏄繑鍥炴睜涓?/p>
浜嬪姟鏀寔
榪炴帴鏄牴鎹簨鍔′笂涓嬫枃鏉ヤ粠姹犱腑鍙栧嚭騫惰繘琛屽垎閰嶇殑銆傞櫎闈炲湪榪炴帴瀛楃涓蹭腑鎸囧畾浜?Enlist=false 錛屽惁鍒欙紝榪炴帴姹犲皢紜繚榪炴帴鍦?Current 涓婁笅鏂囦腑鐧昏銆傚鏋滆繛鎺ヤ嬌鐢ㄧ櫥璁扮殑 System.Transactions 浜嬪姟鍏抽棴騫惰繑鍥炴睜涓紝榪炴帴灝嗕繚鐣欏湪姹犱腑錛屼互渚夸嬌鐢ㄧ浉鍚?System.Transactions 浜嬪姟瀵硅榪炴帴姹犵殑涓嬩竴嬈¤姹傚皢榪斿洖鐩稿悓鐨勮繛鎺ャ傚鏋滆浜嬪姟娌℃湁鍙敤榪炴帴錛屽湪璇ヨ繛鎺ユ墦寮鏃訛紝灝嗚嚜鍔ㄦ敞鍐岃榪炴帴銆?/p>
褰撹繛鎺ュ叧闂椂錛屽畠灝嗚閲婃斁鍥炴睜涓紝騫舵牴鎹叾浜嬪姟涓婁笅鏂囨斁鍏ョ浉搴旂殑瀛愰儴鍒嗐傚洜姝わ紝鍗充嬌鍒嗗竷寮忎簨鍔′粛鐒舵寕璧鳳紝浠嶅彲浠ュ叧闂榪炴帴鑰屼笉浼氱敓鎴愰敊璇傝繖鏍鳳紝鎮ㄥ氨鍙互鍦ㄩ殢鍚庢彁浜ゆ垨涓鍒嗗竷寮忎簨鍔°?/p>
浣跨敤榪炴帴瀛楃涓插叧閿瓧鎺у埗榪炴帴姹?/h1>
SqlConnection 瀵硅薄鐨?ConnectionString 灞炴ф敮鎸佽繛鎺ュ瓧絎︿覆閿?鍊煎錛屽彲浠ョ敤浜庤皟鏁磋繛鎺ユ睜閫昏緫鐨勮涓恒傛湁鍏蟲洿澶氫俊鎭紝璇峰弬瑙?ConnectionString 銆?/p>
姹犵鐗?/h1>
姹犵鐗囨槸璁稿 Web 搴旂敤紼嬪簭涓殑涓涓父瑙侀棶棰橈紝搴旂敤紼嬪簭鍙兘浼氬垱寤哄ぇ閲忓湪榪涚▼閫鍑哄悗鎵嶄細閲婃斁鐨勬睜銆傝繖鏍鳳紝灝嗘墦寮澶ч噺鐨勮繛鎺ワ紝鍗犵敤璁稿鍐呭瓨錛屼粠鑰屽獎鍝嶆ц兘銆?/p>
鍥犱負闆嗘垚瀹夊叏鎬т駭鐢熺殑姹犵鐗?/h3>
榪炴帴鏍規嵁榪炴帴瀛楃涓蹭互鍙婄敤鎴鋒爣璇嗘潵寤虹珛姹犺繛鎺ャ傚洜姝わ紝濡傛灉浣跨敤緗戠珯涓婄殑鍩烘湰韜喚楠岃瘉鎴?Windows 韜喚楠岃瘉浠ュ強闆嗘垚鐨勫畨鍏ㄧ櫥褰曪紝姣忎釜鐢ㄦ埛灝嗚幏寰椾竴涓睜銆傚敖綆¤繖鏍峰彲浠ユ彁楂樺崟涓敤鎴風殑鍚庣畫鏁版嵁搴撹姹傜殑鎬ц兘錛屼絾鏄鐢ㄦ埛鏃犳硶鍒╃敤鍏朵粬鐢ㄦ埛寤虹珛鐨勮繛鎺ャ傝繖鏍瘋繕浣挎瘡涓敤鎴瘋嚦灝戜駭鐢熶竴涓笌鏁版嵁搴撴湇鍔″櫒鐨勮繛鎺ャ傝繖瀵圭壒瀹?Web 搴旂敤紼嬪簭緇撴瀯浼氫駭鐢熷壇浣滅敤錛屽洜涓哄紑鍙戜漢鍛橀渶瑕佽 閲忓畨鍏ㄦу拰瀹¤瑕佹眰銆?/p>
鍥犱負璁稿鏁版嵁搴撲駭鐢熺殑姹犵鐗?/h3>
璁稿 Internet 鏈嶅姟鎻愪緵鍟嗗湪涓鍙版湇鍔″櫒涓婃墭綆″涓綉绔欍備粬浠彲鑳戒嬌鐢ㄥ崟涓暟鎹簱紜紿椾綋韜喚楠岃瘉鐧誨綍錛岀劧鍚庝負璇ョ敤鎴鋒垨鐢ㄦ埛緇勬墦寮涓庣壒瀹氭暟鎹簱鐨勮繛鎺ャ備笌韜喚楠岃瘉鏁版嵁搴撶殑榪炴帴灝嗗緩绔嬫睜榪炴帴錛屼緵姣忎釜鐢ㄦ埛浣跨敤銆備絾鏄紝姣忎釜鏁版嵁搴撶殑榪炴帴瀛樺湪涓涓嫭绔嬬殑姹狅紝鍥犳澧炲姞浜嗕笌鏈嶅姟鍣ㄧ殑榪炴帴鏁般?/p>
榪欎篃浼氬搴旂敤紼嬪簭璁捐浜х敓鍓綔鐢ㄣ備絾鏄紝鍙互閫氳繃涓涓浉瀵圭畝鍗曠殑鏂瑰紡閬垮厤姝ゅ壇浣滅敤錛岃屽張涓嶄細褰卞搷榪炴帴 SQL Server 鏃剁殑瀹夊叏鎬с備笉鏄負姣忎釜鐢ㄦ埛鎴栫粍榪炴帴鐙珛鐨勬暟鎹簱錛岃屾槸榪炴帴鍒版湇鍔″櫒涓婄殑鐩稿悓鏁版嵁搴擄紝鐒跺悗鎵ц Transact-SQL USE 璇彞鏉ュ垏鎹負鎵闇鐨勬暟鎹簱銆備互涓嬩唬鐮佹婕旂ず鍏ュ浣曞垱寤轟笌 master 鏁版嵁搴撶殑鍒濆榪炴帴錛岀劧鍚庡垏鎹㈠埌 databaseName 瀛楃涓插彉閲忎腑鎸囧畾鐨勬墍闇鏁版嵁搴撱?/p>
C#:// Assumes that command is a SqlCommand object. using (SqlConnection connection = new SqlConnection( "Server=MSSQL1;uid=xxx;pwd=xxx;database=master" )) { connection.Open(); command.ExecuteNonQuery("USE " + databaseName); }
搴旂敤紼嬪簭瑙掕壊鍜岃繛鎺ユ睜
閫氳繃璋冪敤 sp_setapprole 緋葷粺瀛樺偍榪囩▼嬋媧諱簡 SQL Server 搴旂敤紼嬪簭瑙掕壊涔嬪悗錛岃榪炴帴鐨勫畨鍏ㄤ笂涓嬫枃鏃犳硶閲嶇疆銆備絾鏄紝濡傛灉鍚敤浜嗘睜錛岃繛鎺ュ皢榪斿洖姹狅紝鍦ㄩ噸澶嶄嬌鐢ㄦ睜榪炴帴鏃朵細鍑洪敊銆?/p>
濡傛灉浣跨敤鐨勬槸 SQL Server 搴旂敤紼嬪簭瑙掕壊錛屾垜浠緩璁偍鍦ㄨ繛鎺ュ瓧絎︿覆涓負搴旂敤紼嬪簭紱佺敤榪炴帴姹犮傛湁鍏蟲洿澶氫俊鎭紝璇峰弬瑙佺煡璇嗗簱鏂囩珷“SQL application role errors with OLE DB resource pooling ”銆?/p>
鍩轟簬 Visual C++6.0 鐨?DLL 緙栫▼瀹炵幇 http://m.shnenglu.com/xushaohua/archive/2007/12/04/37783.htmlneter neter Tue, 04 Dec 2007 05:44:00 GMT http://m.shnenglu.com/xushaohua/archive/2007/12/04/37783.html http://m.shnenglu.com/xushaohua/comments/37783.html http://m.shnenglu.com/xushaohua/archive/2007/12/04/37783.html#Feedback 1 http://m.shnenglu.com/xushaohua/comments/commentRss/37783.html http://m.shnenglu.com/xushaohua/services/trackbacks/37783.html 涓銆佸墠璦 銆銆鑷粠寰蔣鎺ㄥ嚭 16 浣嶇殑 Windows 鎿嶄綔緋葷粺璧鳳紝姝ゅ悗姣忕鐗堟湰鐨?/span> Windows 鎿嶄綔緋葷粺閮介潪甯鎬緷璧栦簬鍔ㄦ侀摼鎺ュ簱 (DLL) 涓殑鍑芥暟鍜屾暟鎹紝瀹為檯涓?/span> Windows 鎿嶄綔緋葷粺涓嚑涔庢墍鏈夌殑鍐呭閮界敱 DLL 浠ヤ竴縐嶆垨鍙﹀涓縐嶅艦寮忎唬琛ㄧ潃錛屼緥濡傛樉紺虹殑瀛椾綋鍜屽浘鏍囧瓨鍌ㄥ湪 GDI DLL 涓佹樉紺?/span> Windows 妗岄潰鍜屽鐞嗙敤鎴風殑杈撳叆鎵闇瑕佺殑浠g爜琚瓨鍌ㄥ湪涓涓?/span> User DLL 涓?/span> Windows 緙栫▼鎵闇瑕佺殑澶ч噺鐨?/span> API 鍑芥暟涔熻鍖呭惈鍦?/span> Kernel DLL 涓?/span> 銆銆鍦?/span> Windows 鎿嶄綔緋葷粺涓嬌鐢?/span> DLL 鏈夊緢澶氫紭鐐癸紝鏈涓昏鐨勪竴鐐規槸澶氫釜搴旂敤紼嬪簭銆佺敋鑷蟲槸涓嶅悓璇█緙栧啓鐨勫簲鐢ㄧ▼搴忓彲浠ュ叡浜竴涓?/span> DLL 鏂囦歡錛岀湡姝e疄鐜頒簡璧勬簮 " 鍏變韓 " 錛屽ぇ澶х緝灝忎簡搴旂敤紼嬪簭鐨勬墽琛屼唬鐮侊紝鏇村姞鏈夋晥鐨勫埄鐢ㄤ簡鍐呭瓨錛涗嬌鐢?/span> DLL 鐨勫彟涓涓紭鐐規槸 DLL 鏂囦歡浣滀負涓涓崟鐙殑紼嬪簭妯″潡錛屽皝瑁呮с佺嫭绔嬫уソ錛屽湪杞歡闇瑕佸崌綰х殑鏃跺欙紝寮鍙戜漢鍛樺彧闇瑕佷慨鏀圭浉搴旂殑 DLL 鏂囦歡灝卞彲浠ヤ簡錛岃屼笖錛屽綋 DLL 涓殑鍑芥暟鏀瑰彉鍚庯紝鍙涓嶆槸鍙傛暟鐨勬敼鍙?/span> , 紼嬪簭浠g爜騫朵笉闇瑕侀噸鏂扮紪璇戙傝繖鍦ㄧ紪紼嬫椂鍗佸垎鏈夌敤錛屽ぇ澶ф彁楂樹簡杞歡寮鍙戝拰緇存姢鐨勬晥鐜囥?/span> 銆銆鏃㈢劧 DLL 閭d箞閲嶈錛屾墍浠ユ悶娓呮浠涔堟槸 DLL 銆佸浣曞湪 Windows 鎿嶄綔緋葷粺涓紑鍙戜嬌鐢?/span> DLL 鏄▼搴忓紑鍙戜漢鍛樹笉寰椾笉瑙e喅鐨勪竴涓棶棰樸傛湰鏂囬拡瀵硅繖浜涢棶棰橈紝閫氳繃涓涓畝鍗曠殑渚嬪瓙錛屽嵆鍦ㄤ竴涓?/span> DLL 涓疄鐜版瘮杈冩渶澶с佹渶灝忔暣鏁拌繖涓や釜綆鍗曞嚱鏁幫紝鍏ㄩ潰鍦拌В鏋愪簡鍦?/span> Visual C++ 緙栬瘧鐜涓嬬紪紼嬪疄鐜?/span> DLL 鐨勮繃紼嬶紝鏂囩珷涓墍鐢ㄥ埌鐨勭▼搴忎唬鐮佸湪 Windows98 緋葷粺銆?/span> Visual C++6.0 緙栬瘧鐜涓嬮氳繃銆?/span> 銆銆浜屻?/strong> DLL 鐨勬蹇?/span> 銆銆 DLL 鏄緩绔嬪湪瀹㈡埛 / 鏈嶅姟鍣ㄩ氫俊鐨勬蹇典笂錛屽寘鍚嫢騫插嚱鏁般佺被鎴栬祫婧愮殑搴撴枃浠訛紝鍑芥暟鍜屾暟鎹瀛樺偍鍦ㄤ竴涓?/span> DLL 錛堟湇鍔″櫒錛変笂騫剁敱涓涓垨澶氫釜瀹㈡埛瀵煎嚭鑰屼嬌鐢紝榪欎簺瀹㈡埛鍙互鏄簲鐢ㄧ▼搴忔垨鑰呮槸鍏跺畠鐨?/span> DLL 銆?/span> DLL 搴撲笉鍚屼簬闈欐佸簱錛屽湪闈欐佸簱鎯呭喌涓嬶紝鍑芥暟鍜屾暟鎹緙栬瘧榪涗竴涓簩榪涘埗鏂囦歡錛堥氬父鎵╁睍鍚嶄負 *.LIB 錛夛紝 Visual C++ 鐨勭紪璇戝櫒鍦ㄥ鐞嗙▼搴忎唬鐮佹椂灝嗕粠闈欐佸簱涓仮澶嶈繖浜涘嚱鏁板拰鏁版嵁騫舵妸浠栦滑鍜屽簲鐢ㄧ▼搴忎腑鐨勫叾浠栨ā鍧楃粍鍚堝湪涓璧風敓鎴愬彲鎵ц鏂囦歡銆傝繖涓繃紼嬬О涓?/span> " 闈欐侀摼鎺?/span> " 錛屾鏃跺洜涓哄簲鐢ㄧ▼搴忔墍闇鐨勫叏閮ㄥ唴瀹歸兘鏄粠搴撲腑澶嶅埗浜嗗嚭鏉ワ紝鎵浠ラ潤鎬佸簱鏈韓騫朵笉闇瑕佷笌鍙墽琛屾枃浠朵竴璧峰彂琛屻?/span> 銆銆鍦ㄥ姩鎬佸簱鐨勬儏鍐典笅錛屾湁涓や釜鏂囦歡錛屼竴涓槸寮曞叆搴擄紙 .LIB 錛夋枃浠訛紝涓涓槸 DLL 鏂囦歡錛屽紩鍏ュ簱鏂囦歡鍖呭惈琚?/span> DLL 瀵煎嚭鐨勫嚱鏁扮殑鍚嶇О鍜屼綅緗紝 DLL 鍖呭惈瀹為檯鐨勫嚱鏁板拰鏁版嵁錛屽簲鐢ㄧ▼搴忎嬌鐢?/span> LIB 鏂囦歡閾炬帴鍒版墍闇瑕佷嬌鐢ㄧ殑 DLL 鏂囦歡錛屽簱涓殑鍑芥暟鍜屾暟鎹茍涓嶅鍒跺埌鍙墽琛屾枃浠朵腑錛屽洜姝ゅ湪搴旂敤紼嬪簭鐨勫彲鎵ц鏂囦歡涓紝瀛樻斁鐨勪笉鏄璋冪敤鐨勫嚱鏁頒唬鐮侊紝鑰屾槸 DLL 涓墍瑕佽皟鐢ㄧ殑鍑芥暟鐨勫唴瀛樺湴鍧錛岃繖鏍峰綋涓涓垨澶氫釜搴旂敤紼嬪簭榪愯鏄啀鎶婄▼搴忎唬鐮佸拰琚皟鐢ㄧ殑鍑芥暟浠g爜閾炬帴璧鋒潵錛屼粠鑰岃妭鐪佷簡鍐呭瓨璧勬簮銆備粠涓婇潰鐨勮鏄庡彲浠ョ湅鍑猴紝 DLL 鍜?/span> .LIB 鏂囦歡蹇呴』闅忓簲鐢ㄧ▼搴忎竴璧峰彂琛岋紝鍚﹀垯搴旂敤紼嬪簭灝嗕細浜х敓閿欒銆?/span> 銆銆寰蔣鐨?/span> Visual C++ 鏀寔涓夌 DLL 錛屽畠浠垎鍒槸 Non-MFC Dll 錛堥潪 MFC 鍔ㄦ佸簱錛夈?/span> Regular Dll 錛堝父瑙?/span> DLL 錛夈?/span> Extension Dll 錛堟墿灞?/span> DLL 錛夈?/span> Non-MFC DLL 鎸囩殑鏄笉鐢?/span> MFC 鐨勭被搴撶粨鏋勶紝鐩存帴鐢?/span> C 璇█鍐欑殑 DLL 錛屽叾瀵煎嚭鐨勫嚱鏁版槸鏍囧噯鐨?/span> C 鎺ュ彛錛岃兘琚潪 MFC 鎴?/span> MFC 緙栧啓鐨勫簲鐢ㄧ▼搴忔墍璋冪敤銆?/span> Regular DLL: 鍜屼笅榪扮殑 Extension Dlls 涓鏍鳳紝鏄敤 MFC 綾誨簱緙栧啓鐨勶紝瀹冪殑涓涓槑鏄劇殑鐗圭偣鏄湪婧愭枃浠墮噷鏈変竴涓戶鎵?/span> CWinApp 鐨勭被錛堟敞鎰忥細姝ょ被 DLL 铏界劧浠?/span> CWinApp 媧劇敓錛屼絾娌℃湁娑堟伅寰幆錛?/span> , 琚鍑虹殑鍑芥暟鏄?/span> C 鍑芥暟銆?/span> C++ 綾繪垨鑰?/span> C++ 鎴愬憳鍑芥暟錛堟敞鎰忎笉瑕佹妸鏈 C++ 綾諱笌 MFC 鐨勫井杞熀紜 C++ 綾葷浉娣鋒穯錛夛紝璋冪敤甯歌 DLL 鐨勫簲鐢ㄧ▼搴忎笉蹇呮槸 MFC 搴旂敤紼嬪簭錛屽彧瑕佹槸鑳借皟鐢ㄧ被 C 鍑芥暟鐨勫簲鐢ㄧ▼搴忓氨鍙互錛屽畠浠彲浠ユ槸鍦?/span> Visual C++ 銆?/span> Dephi 銆?/span> Visual Basic 銆?/span> Borland C 絳夌紪璇戠幆澧冧笅鍒╃敤 DLL 寮鍙戝簲鐢ㄧ▼搴忋?/span> 銆銆甯歌 DLL 鍙堝彲緇嗗垎鎴愰潤鎬侀摼鎺ュ埌 MFC 鍜屽姩鎬侀摼鎺ュ埌 MFC 涓婄殑錛岃繖涓ょ甯歌 DLL 鐨勫尯鍒皢鍦ㄤ笅闈粙緇嶃備笌甯歌 DLL 鐩告瘮錛屼嬌鐢ㄦ墿灞?/span> DLL 鐢ㄤ簬瀵煎嚭澧炲己 MFC 鍩虹綾葷殑鍑芥暟鎴栧瓙綾伙紝鐢ㄨ繖縐嶇被鍨嬬殑鍔ㄦ侀摼鎺ュ簱錛屽彲浠ョ敤鏉ヨ緭鍑轟竴涓粠 MFC 鎵緇ф壙涓嬫潵鐨勭被銆?/span> 銆銆鎵╁睍 DLL 鏄嬌鐢?/span> MFC 鐨勫姩鎬侀摼鎺ョ増鏈墍鍒涘緩鐨勶紝騫朵笖瀹冨彧琚敤 MFC 綾誨簱鎵緙栧啓鐨勫簲鐢ㄧ▼搴忔墍璋冪敤銆備緥濡備綘宸茬粡鍒涘緩浜嗕竴涓粠 MFC 鐨?/span> CtoolBar 綾葷殑媧劇敓綾葷敤浜庡垱寤轟竴涓柊鐨勫伐鍏鋒爮錛屼負浜嗗鍑鴻繖涓被錛屼綘蹇呴』鎶婂畠鏀懼埌涓涓?/span> MFC 鎵╁睍鐨?/span> DLL 涓傛墿灞?/span> DLL 鍜屽父瑙?/span> DLL 涓嶄竴鏍鳳紝瀹冩病鏈変竴涓粠 CWinApp 緇ф壙鑰屾潵鐨勭被鐨勫璞★紝鎵浠ワ紝寮鍙戜漢鍛樺繀欏誨湪 DLL 涓殑 DllMain 鍑芥暟娣誨姞鍒濆鍖栦唬鐮佸拰緇撴潫浠g爜銆?/span>
涓夈佸姩鎬侀摼鎺ュ簱鐨勫垱寤?/font> 銆銆鍦?/span> Visual C++6.0 寮鍙戠幆澧冧笅錛屾墦寮 FileNewProject 閫夐」錛屽彲浠ラ夋嫨 Win32 Dynamic-Link Library 鎴?/span> MFC AppWizard[dll] 鏉ヤ互涓嶅悓鐨勬柟寮忔潵鍒涘緩 Non-MFC Dll 銆?/span> Regular Dll 銆?/span> Extension Dll 絳変笉鍚岀綾葷殑鍔ㄦ侀摼鎺ュ簱銆?/span> 銆銆 1 錛?/span> Win32 Dynamic-Link Library 鏂瑰紡鍒涘緩 Non-MFC DLL 鍔ㄦ侀摼鎺ュ簱 銆銆姣忎竴涓?/span> DLL 蹇呴』鏈変竴涓叆鍙g偣錛岃繖灝辮薄鎴戜滑鐢?/span> C 緙栧啓鐨勫簲鐢ㄧ▼搴忎竴鏍鳳紝蹇呴』鏈変竴涓?/span> WINMAIN 鍑芥暟涓鏍楓傚湪 Non-MFC DLL 涓?/span> DllMain 鏄竴涓己鐪佺殑鍏ュ彛鍑芥暟錛屼綘涓嶉渶瑕佺紪鍐欒嚜宸辯殑 DLL 鍏ュ彛鍑芥暟錛岀敤榪欎釜緙虹渷鐨勫叆鍙e嚱鏁板氨鑳戒嬌鍔ㄦ侀摼鎺ュ簱琚皟鐢ㄦ椂寰楀埌姝g‘鐨勫垵濮嬪寲銆傚鏋滃簲鐢ㄧ▼搴忕殑 DLL 闇瑕佸垎閰嶉澶栫殑鍐呭瓨鎴栬祫婧愭椂錛屾垨鑰呰闇瑕佸姣忎釜榪涚▼鎴栫嚎紼嬪垵濮嬪寲鍜屾竻闄ゆ搷浣滄椂錛岄渶瑕佸湪鐩稿簲鐨?/span> DLL 宸ョ▼鐨?/span> .CPP 鏂囦歡涓 DllMain() 鍑芥暟鎸夌収涓嬮潰鐨勬牸寮忎功鍐欍?/span> 銆
銆
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) { switch( ul_reason_for_call ) { case DLL_PROCESS_ATTACH: ....... case DLL_THREAD_ATTACH: ....... case DLL_THREAD_DETACH: ....... case DLL_PROCESS_DETACH: ....... } return TRUE; }
銆銆鍙傛暟涓紝 hMoudle 鏄姩鎬佸簱琚皟鐢ㄦ椂鎵浼犻掓潵鐨勪竴涓寚鍚戣嚜宸辯殑鍙ユ焺 ( 瀹為檯涓婏紝瀹冩槸鎸囧悜 _DGROUP 孌電殑涓涓夋嫨絎?/span> ) 錛?/span> ul_reason_for_call 鏄竴涓鏄庡姩鎬佸簱琚皟鍘熷洜鐨勬爣蹇楋紝褰撹繘紼嬫垨綰跨▼瑁呭叆鎴栧嵏杞藉姩鎬侀摼鎺ュ簱鐨勬椂鍊欙紝鎿嶄綔緋葷粺璋冪敤鍏ュ彛鍑芥暟錛屽茍璇存槑鍔ㄦ侀摼鎺ュ簱琚皟鐢ㄧ殑鍘熷洜錛屽畠鎵鏈夌殑鍙兘鍊間負錛?/span> DLL_PROCESS_ATTACH: 榪涚▼琚皟鐢ㄣ?/span> DLL_THREAD_ATTACH: 綰跨▼琚皟鐢ㄣ?/span> DLL_PROCESS_DETACH: 榪涚▼琚仠姝€?/span> DLL_THREAD_DETACH: 綰跨▼琚仠姝紱 lpReserved 涓轟繚鐣欏弬鏁般傚埌姝や負姝紝 DLL 鐨勫叆鍙e嚱鏁板凡緇忓啓浜嗭紝鍓╀笅閮ㄥ垎鐨勫疄鐜頒篃涓嶉毦錛屼綘鍙互鍦?/span> DLL 宸ョ▼涓姞鍏ヤ綘鎵鎯寵杈撳嚭鐨勫嚱鏁版垨鍙橀噺浜嗐?/span> 銆銆鎴戜滑宸茬粡鐭ラ亾 DLL 鏄寘鍚嫢騫蹭釜鍑芥暟鐨勫簱鏂囦歡錛屽簲鐢ㄧ▼搴忎嬌鐢?/span> DLL 涓殑鍑芥暟涔嬪墠錛屽簲璇ュ厛瀵煎嚭榪欎簺鍑芥暟錛屼互渚夸緵緇欏簲鐢ㄧ▼搴忎嬌鐢ㄣ傝瀵煎嚭榪欎簺鍑芥暟鏈変袱縐嶆柟娉曪紝涓鏄湪瀹氫箟鍑芥暟鏃朵嬌鐢ㄥ鍑哄叧閿瓧 _declspec(dllexport) 錛屽彟澶栦竴縐嶆柟娉曟槸鍦ㄥ垱寤?/span> DLL 鏂囦歡鏃朵嬌鐢ㄦā鍧楀畾涔夋枃浠?/span> .Def 銆傞渶瑕佽鑰呮敞鎰忕殑鏄湪浣跨敤絎竴縐嶆柟娉曠殑鏃跺欙紝涓嶈兘浣跨敤 DEF 鏂囦歡銆備笅闈㈤氳繃涓や釜渚嬪瓙鏉ヨ鏄庡浣曚嬌鐢ㄨ繖涓ょ鏂規硶鍒涘緩 DLL 鏂囦歡銆?/span> 銆銆 1 錛変嬌鐢ㄥ鍑哄嚱鏁板叧閿瓧 _declspec(dllexport) 鍒涘緩 MyDll.dll 錛岃鍔ㄦ侀摼鎺ュ簱涓湁涓や釜鍑芥暟錛屽垎鍒敤鏉ュ疄鐜板緱鍒頒袱涓暟鐨勬渶澶у拰鏈灝忔暟銆傚湪 MyDll.h 鍜?/span> MyDLL.cpp 鏂囦歡涓垎鍒緭鍏ュ涓嬪師浠g爜錛?/span> 銆
//MyDLL.h extern "C" _declspec(dllexport) int Max(int a, int b); extern "C" _declspec(dllexport) int Min(int a, int b); //MyDll.cpp 錛僫 nclude 錛僫 nclude"MyDll.h" int Max(int a, int b) { if(a>=b)return a; else return b; } int Min(int a, int b) { if(a>=b)return b; else return a; }
銆銆璇ュ姩鎬侀摼鎺ュ簱緙栬瘧鎴愬姛鍚庯紝鎵撳紑 MyDll 宸ョ▼涓殑 debug 鐩綍錛屽彲浠ョ湅鍒?/span> MyDll.dll 銆?/span> MyDll.lib 涓や釜鏂囦歡銆?/span> LIB 鏂囦歡涓寘鍚?/span> DLL 鏂囦歡鍚嶅拰 DLL 鏂囦歡涓殑鍑芥暟鍚嶇瓑錛岃 LIB 鏂囦歡鍙槸瀵瑰簲璇?/span> DLL 鏂囦歡鐨?/span> " 鏄犲儚鏂囦歡 " 錛屼笌 DLL 鏂囦歡涓紝 LIB 鏂囦歡鐨勯暱搴﹁灝忕殑澶氾紝鍦ㄨ繘琛岄殣寮忛摼鎺?/span> DLL 鏃惰鐢ㄥ埌瀹冦傝鑰呭彲鑳藉凡緇忔敞鎰忓埌鍦?/span> MyDll.h 涓湁鍏抽敭瀛?/span> "extern C" 錛屽畠鍙互浣垮叾浠栫紪紼嬭璦璁塊棶浣犵紪鍐欑殑 DLL 涓殑鍑芥暟銆?/span> 銆銆 2 錛夌敤 .def 鏂囦歡鍒涘緩宸ョ▼ MyDll 銆銆涓轟簡鐢?/span> .def 鏂囦歡鍒涘緩 DLL 錛岃鍏堝垹闄や笂涓緥瀛愬垱寤虹殑宸ョ▼涓殑 MyDll.h 鏂囦歡錛屼繚鐣?/span> MyDll.cpp 騫跺湪璇ユ枃浠跺ご鍒犻櫎 錛僫 nclude MyDll.h 璇彞錛屽悓鏃跺線璇ュ伐紼嬩腑鍔犲叆涓涓枃鏈枃浠訛紝鍛藉悕涓?/span> MyDll.def 錛屽啀鍦ㄨ鏂囦歡涓姞鍏ュ涓嬩唬鐮侊細 LIBRARY MyDll EXPORTS Max Min 銆銆鍏朵腑 LIBRARY 璇彞璇存槑璇?/span> def 鏂囦歡鏄睘浜庣浉搴?/span> DLL 鐨勶紝 EXPORTS 璇彞涓嬪垪鍑鴻瀵煎嚭鐨勫嚱鏁板悕縐般傛垜浠彲浠ュ湪 .def 鏂囦歡涓殑瀵煎嚭鍑芥暟鍚庡姞 @n 錛屽 Max@1 錛?/span> Min@2 錛岃〃紺鴻瀵煎嚭鐨勫嚱鏁伴『搴忓彿錛屽湪榪涜鏄懼紡榪炴椂鍙互鐢ㄥ埌瀹冦傝 DLL 緙栬瘧鎴愬姛鍚庯紝鎵撳紑宸ョ▼涓殑 Debug 鐩綍錛屽悓鏍蜂篃浼氱湅鍒?/span> MyDll.dll 鍜?/span> MyDll.lib 鏂囦歡銆?/span> 銆銆 2 錛?/span> MFC AppWizard[dll] 鏂瑰紡鐢熸垚甯歌 / 鎵╁睍 DLL 銆銆鍦?/span> MFC AppWizard[dll] 涓嬬敓鎴?/span> DLL 鏂囦歡鍙堟湁涓夌鏂瑰紡錛屽湪鍒涘緩 DLL 鏄紝瑕佹牴鎹疄闄呮儏鍐甸夋嫨鍒涘緩 DLL 鐨勬柟寮忋備竴縐嶆槸甯歌 DLL 闈欐侀摼鎺ュ埌 MFC 錛屽彟涓縐嶆槸甯歌 DLL 鍔ㄦ侀摼鎺ュ埌 MFC 銆備袱鑰呯殑鍖哄埆鏄細鍓嶈呬嬌鐢ㄧ殑鏄?/span> MFC 鐨勯潤鎬侀摼鎺ュ簱錛岀敓鎴愮殑 DLL 鏂囦歡闀垮害澶э紝涓鑸笉浣跨敤榪欑鏂瑰紡錛屽悗鑰呬嬌鐢?/span> MFC 鐨勫姩鎬侀摼鎺ュ簱錛岀敓鎴愮殑 DLL 鏂囦歡闀垮害灝忥紱鍔ㄦ侀摼鎺ュ埌 MFC 鐨勮鍒?/span> DLL 鎵鏈夎緭鍑虹殑鍑芥暟搴旇浠ュ涓嬭鍙ュ紑濮嬶細 銆
AFX_MANAGE_STATE(AfxGetStaticModuleState( )) // 姝よ鍙ョ敤鏉ユ紜湴鍒囨崲 MFC 妯″潡鐘舵?/span>
銆銆鏈鍚庝竴縐嶆槸 MFC 鎵╁睍 DLL 錛岃繖縐?/span> DLL 鐗圭偣鏄敤鏉ュ緩绔?/span> MFC 鐨勬淳鐢熺被錛?/span> Dll 鍙鐢?/span> MFC 綾誨簱鎵緙栧啓鐨勫簲鐢ㄧ▼搴忔墍璋冪敤銆傚墠闈㈡垜浠凡緇忎粙緇嶈繃錛?/span> Extension DLLs 鍜?/span> Regular DLLs 涓嶄竴鏍鳳紝瀹冩病鏈変竴涓粠 CWinApp 緇ф壙鑰屾潵鐨勭被鐨勫璞★紝緙栬瘧鍣ㄩ粯璁や簡涓涓?/span> DLL 鍏ュ彛鍑芥暟 DLLMain() 浣滀負瀵?/span> DLL 鐨勫垵濮嬪寲錛屼綘鍙互鍦ㄦ鍑芥暟涓疄鐜板垵濮嬪寲 , 浠g爜濡備笅錛?/span> 銆
BOOL WINAPI APIENTRY DLLMain(HINSTANCE hinstDll 錛?/span> DWORD reason 錛?/span> LPVOID flmpload) { switch(reason) { ……………// 鍒濆鍖栦唬鐮侊紱 } return true; }
銆銆鍙傛暟 hinstDll 瀛樻斁 DLL 鐨勫彞鏌勶紝鍙傛暟 reason 鎸囨槑璋冪敤鍑芥暟鐨勫師鍥狅紝 lpReserved 鏄竴涓緋葷粺鎵淇濈暀鐨勫弬鏁般傚浜庨殣寮忛摼鎺ユ槸涓涓潪闆跺鹼紝瀵逛簬鏄懼紡閾炬帴鍊兼槸闆躲?/span> 銆銆鍦?/span> MFC 涓嬪緩绔?/span> DLL 鏂囦歡錛屼細鑷姩鐢熸垚 def 鏂囦歡妗嗘灦錛屽叾瀹冧笌寤虹珛浼犵粺鐨?/span> Non-MFC DLL 娌℃湁浠涔堝尯鍒紝鍙鍦ㄧ浉搴旂殑澶存枃浠跺啓鍏ュ叧閿瓧 _declspec(dllexport) 鍑芥暟綾誨瀷鍜屽嚱鏁板悕絳夛紝鎴栧湪鐢熸垚鐨?/span> def 鏂囦歡涓?/span> EXPORTS 涓嬭緭鍏ュ嚱鏁板悕灝卞彲浠ヤ簡銆傞渶瑕佹敞鎰忕殑鏄湪鍚戝叾瀹冨紑鍙戜漢鍛樺垎鍙?/span> MFC 鎵╁睍 DLL 鏃訛紝涓嶈蹇樿鎻愪緵鎻忚堪 DLL 涓被鐨勫ご鏂囦歡浠ュ強鐩稿簲鐨?/span> .LIB 鏂囦歡鍜?/span> DLL 鏈韓錛屾鍚庡紑鍙戜漢鍛樺氨鑳藉厖鍒嗗埄鐢ㄤ綘寮鍙戠殑鎵╁睍 DLL 浜嗐?br> 銆搴旂敤紼嬪簭浣跨敤DLL 鍙互閲囩敤涓ょ鏂瑰紡錛氫竴縐嶆槸闅愬紡閾炬帴錛屽彟涓縐嶆槸鏄懼紡閾炬帴銆傚湪浣跨敤 DLL 涔嬪墠棣栧厛瑕佺煡閬?/span>DLL 涓嚱鏁扮殑緇撴瀯淇℃伅銆?/span>Visual C++6.0 鍦?/span>VCin 鐩綍涓嬫彁渚涗簡涓涓悕涓?/span>Dumpbin.exe 鐨勫皬紼嬪簭錛岀敤瀹冨彲浠ユ煡鐪?/span>DLL 鏂囦歡涓殑鍑芥暟緇撴瀯銆傚彟澶栵紝 Windows 緋葷粺灝嗛伒寰笅闈㈢殑鎼滅儲欏哄簭鏉ュ畾浣?/span>DLL 錛?/span> 1 錛庡寘鍚?/span>EXE 鏂囦歡鐨勭洰褰曪紝 2 錛庤繘紼嬬殑褰撳墠宸ヤ綔鐩綍錛?/span> 3 錛?/span>Windows 緋葷粺鐩綍錛?/span> 4 錛?/span>Windows 鐩綍錛?/span>5 錛庡垪鍦?/span>Path 鐜鍙橀噺涓殑涓緋誨垪鐩綍銆?/span>銆銆 1 錛庨殣寮忛摼鎺?/span>銆銆闅愬紡閾炬帴灝辨槸鍦ㄧ▼搴忓紑濮嬫墽琛屾椂灝卞皢 DLL 鏂囦歡鍔犺澆鍒板簲鐢ㄧ▼搴忓綋涓傚疄鐜伴殣寮忛摼鎺ュ緢瀹規槗錛屽彧瑕佸皢瀵煎叆鍑芥暟鍏抽敭瀛?/span>_declspec(dllimport) 鍑芥暟鍚嶇瓑鍐欏埌搴旂敤紼嬪簭鐩稿簲鐨勫ご鏂囦歡涓氨鍙互浜嗐備笅闈㈢殑渚嬪瓙閫氳繃闅愬紡閾炬帴璋冪敤 MyDll.dll 搴撲腑鐨?/span>Min 鍑芥暟銆傞鍏堢敓鎴愪竴涓」鐩負 TestDll 錛屽湪 DllTest.h 銆?/span>DllTest.cpp 鏂囦歡涓垎鍒緭鍏ュ涓嬩唬鐮侊細 銆
銆
//Dlltest.h #pragma comment(lib 錛?/span> "MyDll.lib") extern "C"_declspec(dllimport) int Max(int a,int b); extern "C"_declspec(dllimport) int Min(int a,int b); //TestDll.cpp 錛僫 nclude 錛僫 nclude"Dlltest.h" void main() {int a; a=min(8,10) printf(" 姣旇緝鐨勭粨鏋滀負 %d " 錛?/span> a); } 銆
銆銆鍦ㄥ垱寤?/span> DllTest.exe 鏂囦歡涔嬪墠錛岃鍏堝皢 MyDll.dll 鍜?/span> MyDll.lib 鎷瘋礉鍒板綋鍓嶅伐紼嬫墍鍦ㄧ殑鐩綍涓嬮潰錛屼篃鍙互鎷瘋礉鍒?/span> windows 鐨?/span> System 鐩綍涓嬨傚鏋?/span> DLL 浣跨敤鐨勬槸 def 鏂囦歡錛岃鍒犻櫎 TestDll.h 鏂囦歡涓叧閿瓧 extern "C" 銆?/span> TestDll.h 鏂囦歡涓殑鍏抽敭瀛?/span> Progam commit 鏄 Visual C+ 鐨勭紪璇戝櫒鍦?/span> link 鏃訛紝閾炬帴鍒?/span> MyDll.lib 鏂囦歡錛屽綋鐒訛紝寮鍙戜漢鍛樹篃鍙互涓嶄嬌鐢?/span> #pragma comment(lib 錛?/span> "MyDll.lib") 璇彞錛岃岀洿鎺ュ湪宸ョ▼鐨?/span> Setting->Link 欏電殑 Object/Moduls 鏍忓~鍏?/span> MyDll.lib 鏃㈠彲銆?/span> 銆銆 2 錛庢樉寮忛摼鎺?/span> 銆銆鏄懼紡閾炬帴鏄簲鐢ㄧ▼搴忓湪鎵ц榪囩▼涓殢鏃跺彲浠ュ姞杞?/span> DLL 鏂囦歡錛屼篃鍙互闅忔椂鍗歌澆 DLL 鏂囦歡錛岃繖鏄殣寮忛摼鎺ユ墍鏃犳硶浣滃埌鐨勶紝鎵浠ユ樉寮忛摼鎺ュ叿鏈夋洿濂界殑鐏墊椿鎬э紝瀵逛簬瑙i噴鎬ц璦鏇翠負鍚堥傘備笉榪囧疄鐜版樉寮忛摼鎺ヨ楹葷儲涓浜涖傚湪搴旂敤紼嬪簭涓敤 LoadLibrary 鎴?/span> MFC 鎻愪緵鐨?/span> AfxLoadLibrary 鏄懼紡鐨勫皢鑷繁鎵鍋氱殑鍔ㄦ侀摼鎺ュ簱璋冭繘鏉ワ紝鍔ㄦ侀摼鎺ュ簱鐨勬枃浠跺悕鍗蟲槸涓婅堪涓や釜鍑芥暟鐨勫弬鏁幫紝姝ゅ悗鍐嶇敤 GetProcAddress() 鑾峰彇鎯寵寮曞叆鐨勫嚱鏁般傝嚜姝わ紝浣犲氨鍙互璞′嬌鐢ㄥ鍚屽湪搴旂敤紼嬪簭鑷畾涔夌殑鍑芥暟涓鏍鋒潵璋冪敤姝ゅ紩鍏ュ嚱鏁頒簡銆傚湪搴旂敤紼嬪簭閫鍑轟箣鍓嶏紝搴旇鐢?/span> FreeLibrary 鎴?/span> MFC 鎻愪緵鐨?/span> AfxFreeLibrary 閲婃斁鍔ㄦ侀摼鎺ュ簱銆備笅闈㈡槸閫氳繃鏄懼紡閾炬帴璋冪敤 DLL 涓殑 Max 鍑芥暟鐨勪緥瀛愩?/span> 銆
錛僫 nclude 錛僫 nclude void main(void) { typedef int(*pMax)(int a,int b); typedef int(*pMin)(int a,int b); HINSTANCE hDLL; PMax Max HDLL=LoadLibrary("MyDll.dll");// 鍔犺澆鍔ㄦ侀摼鎺ュ簱 MyDll.dll 鏂囦歡錛?/span> Max=(pMax)GetProcAddress(hDLL,"Max"); A=Max(5,8); Printf(" 姣旇緝鐨勭粨鏋滀負 %d " 錛?/span> a); FreeLibrary(hDLL);// 鍗歌澆 MyDll.dll 鏂囦歡錛?/span> }
銆銆鍦ㄤ笂渚嬩腑浣跨敤綾誨瀷瀹氫箟鍏抽敭瀛?/span> typedef 錛屽畾涔夋寚鍚戝拰 DLL 涓浉鍚岀殑鍑芥暟鍘熷瀷鎸囬拡錛岀劧鍚庨氳繃 LoadLibray() 灝?/span> DLL 鍔犺澆鍒板綋鍓嶇殑搴旂敤紼嬪簭涓茍榪斿洖褰撳墠 DLL 鏂囦歡鐨勫彞鏌勶紝鐒跺悗閫氳繃 GetProcAddress() 鍑芥暟鑾峰彇瀵煎叆鍒板簲鐢ㄧ▼搴忎腑鐨勫嚱鏁版寚閽堬紝鍑芥暟璋冪敤瀹屾瘯鍚庯紝浣跨敤 FreeLibrary() 鍗歌澆 DLL 鏂囦歡銆傚湪緙栬瘧紼嬪簭涔嬪墠錛岄鍏堣灝?/span> DLL 鏂囦歡鎷瘋礉鍒板伐紼嬫墍鍦ㄧ殑鐩綍鎴?/span> Windows 緋葷粺鐩綍涓嬨?/span> 銆銆浣跨敤鏄懼紡閾炬帴搴旂敤紼嬪簭緙栬瘧鏃朵笉闇瑕佷嬌鐢ㄧ浉搴旂殑 Lib 鏂囦歡銆傚彟澶栵紝浣跨敤 GetProcAddress() 鍑芥暟鏃訛紝鍙互鍒╃敤 MAKEINTRESOURCE() 鍑芥暟鐩存帴浣跨敤 DLL 涓嚱鏁板嚭鐜扮殑欏哄簭鍙鳳紝濡傚皢 GetProcAddress(hDLL,"Min") 鏀逛負 GetProcAddress(hDLL, MAKEINTRESOURCE(2)) 錛堝嚱鏁?/span> Min() 鍦?/span> DLL 涓殑欏哄簭鍙鋒槸 2 錛夛紝榪欐牱璋冪敤 DLL 涓殑鍑芥暟閫熷害寰堝揩錛屼絾鏄璁頒綇鍑芥暟鐨勪嬌鐢ㄥ簭鍙鳳紝鍚﹀垯浼氬彂鐢熼敊璇?/span>
]]>