锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
“娌℃湁鎵懼埌 MSVCR80D.dll,鍥犳榪欎釜紼嬪簭鏈兘鍚姩錛岄噸鏂板畨瑁呭簲鐢ㄧ▼搴忥紝鍙兘浼氫慨澶嶆闂銆?#8221;
鍦╒S2005涓紝緇忓父紕板埌榪欎釜闂錛屾庝箞鍔炲憿錛熸槸鍘葷綉涓婁笅杞戒竴涓猟ll涔堬紵鎴戞病鏈夊皾璇曡繃銆備絾鏄綉涓婃彁渚涚殑涓縐嶆柟娉曟槸榪欐牱鐨勶紝鎴戣寰楁尯綆渚跨殑銆?br>
濡傚浘錛?br>

灝?Use FAT32 Work-around" 璁句負yes灝卞彲浠ヤ簡銆?br>
]]>
涔︿腑緇欎簡涓浜涘緩璁拰鏂規(guī)硶錛?/span>
涓鏄湁璁″垝鍦板浠橀敊璇?/span>
瀵瑰簲鐢ㄧ▼搴忓睍寮閫傚綋鐨勮皟璇曪紝搴旇鏄繙鍦ㄤ綘浣跨敤璋冭瘯鍣ㄤ箣鍓嶅氨寮濮嬩簡銆傚澶氫嬌鐢?/span>ASSERT璋冭瘯鎺柦銆傦紙ASSERT鑳屽悗鐨勬蹇墊槸瀹夊叏鍜岄熷害涔嬮棿鐨勪氦鎹€傜▼搴忚繍琛屽洜姝よ繍琛屽緱姣旇緝鎱紝浣嗘槸Debug Build鐨勫埗閫犲氨鏄負浜嗚皟璇曪紝鎵浠ュ彲浠ョ悊瑙o級鍦ㄦ瘡涓涓綘鐨勫亣璁句箣澶勫仛媯楠屽伐浣溿傝繘鍏ヤ竴涓嚱鏁版椂錛岀‘璁ゆ墍鏈夌姸鎬併備笉瑕佸彧鏄鏌ユ寚閽堟槸鍚﹀悎娉曪紱濡傛灉鍙兘錛屾鏌ヤ竴涓嬫寚閽堟墍鎸囩殑緇撴瀯涓殑鏁版嵁鏄惁涓鑷淬?/span>
浜屾槸Bench Testing
鍏跺疄榪欑鏂規(guī)硶灝辨槸鍏堟拠寮澶氱嚎紼嬬殑鐜錛屾祴璇曠▼搴忛昏緫鐨勬紜с傚鏋?/span>OK浜嗭紝鐒跺悗鍐嶈冭檻涓庣嚎紼嬬浉鍏崇殑涓滆タ銆?/span>
涓夋槸綰跨▼瀵硅瘽妗?/span>
榪欓噷涓昏璁ㄨ浜嗗涓涓壒瀹氱殑綰跨▼濡備綍璋冭瘯錛屾柟娉曟槸鎸傝搗鎵鏈夌殑綰跨▼鈥斺旈櫎浜嗘垜浠叧娉ㄧ殑閭d釜銆備功涓粙緇嶇殑鏂規(guī)硶鍦?/span>vs 2005鎴戞病鏈夋壘鍒般?/span>
鍥涙槸鏃ュ織璁板綍
榪欓噷涓昏鏄湪鎺у埗鍙扮獥鍙f樉紺轟竴浜涜繍琛屼俊鎭紝鎴戜滑鍙互浣跨敤printf絳夊嚱鏁板湪鎺у埗鍙拌緭鍑轟竴浜涗俊鎭潵鏌ョ湅綰跨▼鐨勮繍琛屾搴忋?/span>
浜旀槸鍐呭瓨璁板彿
浣跨敤鍐呭瓨璁板彿鐨勫ソ澶勫氨鏄檷浣庡郊姝ゅ共鎵扮殑鍙兘鎬с備絾鏄篃瑕佹敞鎰忓畠涓嶆槸鍚屾鎿嶄綔錛屽彲鑳戒細鍥犱負涓や釜綰跨▼鐨勫悓鏃跺啓鍏ュ紩鏉ラ棶棰樸?/span>
鍏槸紜歡璋冭瘯瀵勫瓨鍣?/span>
鍓嶉潰鐨勮繖鍏鏂規(guī)硶鎴戜篃鍙敤榪囦笁縐嶏紝鏈変竴浜涜繕鐪熸槸絎竴嬈¤鍒般備笉榪囦笉鎬曚笅嬈℃悶涓嶅畾闂鐨勬椂鍊欏彲浠ユ嬁鏉ヨ繘琛屽皾璇曪紝鏉ユ姄涓鎶撻殣钘忓湪紼嬪簭涓殑“鑷櫕浠?#8221;銆?/span>
鎴愬姛娑堥櫎澶氱嚎紼嬬▼搴忕殑“鑷櫕”錛屼綔鑰呰闇瑕佸叿澶囦笁縐嶇礌鍏伙細鍐沖績銆佽愬績銆佸垱閫犲姏銆傚悓鏃朵篃涓嶈铔共錛岃閲囩敤縐戝鐨勬柟娉曪細瑙傚療銆侀嫻嬨佹祴璇曘?/span>
鎬葷粨涓涓嬶細鍊熷姪鏂規(guī)硶錛岃瀵熺幇璞★紝澶ц儐棰勬祴錛屽媷鏁㈠皾璇曪紝瀹屽嫻嬭瘯銆?/span>
欏圭洰涓篃紕板埌浜嗗綰跨▼鐨勪嬌鐢ㄣ傛湭鏉ュ彲鑳藉綰跨▼鐨勪嬌鐢ㄤ細瓚婃潵瓚婂錛屼笉鑳藉仠鐣欏湪瀹屾垚鍔熻兘鍜屼換鍔′笂錛屽簲璇ュ鎬濊冨嫻嬭瘯銆傞伩鍏嶅綰跨▼鐨勪笉鍙‘瀹氭у甫鏉ョ殑涓浜涘洶鎵般?/span>
瀛︿範涔︾睄錛氥?/span>Win32 澶氱嚎紼嬬▼搴忚璁°嬩警鎹瘋瘧
銆銆鍙互鑷鍒涘緩涓鎺ュ叆鐐廣備互涓嬩唬鐮佸垱寤轟竴涓狢MWAP鎺ュ叆鐐癸細
CString strFavoriteXml =
L"<wap-provisioningdoc>"
L"<characteristic type="CM_Networks">"
L"<characteristic type="Test_GPRS">"
L"<parm name="DestId" value="{D1D06580-C364-55ec-9421-6ACF34129C58}" />"
L"</characteristic>"
L"</characteristic>"
L"<characteristic type="CM_GPRSEntries">"
L"<characteristic type="Test_GPRS">"
L"<parm name="DestId" value="{D1D06580-C364-55ec-9421-6ACF34129C58}" />"
L"<characteristic type="DevSpecificCellular">"
L"<parm name="BearerInfoValid" value="1" />"
L"<parm name="GPRSInfoValid" value="1" />"
L"<parm name="GPRSInfoProtocolType" value="2" />"
L"<parm name="GPRSInfoL2ProtocolType" value="PPP" />"
L"<parm name="GPRSInfoAccessPointName" value="cmwap" />"
L"<parm name="GPRSInfoAddress" value="" />"
L"<parm name="GPRSInfoDataCompression" value="1" />"
L"<parm name="GPRSInfoHeaderCompression" value="1" />"
L"<parm name="GPRSInfoParameters" value="" />"
L"</characteristic>"
L"</characteristic>"
L"</characteristic>"
L"<characteristic type="CM_ProxyEntries">"
L"<characteristic type="WAP">"
L"<parm name="SrcId" value="{D1D06580-C364-55ec-9421-6ACF34129C58}" />"
L"<parm name="DestId" value="{436EF144-B4FB-4863-A041-8F905A62C572}" />"
L"<parm name="Proxy" value="10.0.0.172:80" />"
L"<parm name="Enable" value="1" />"
L"<parm name="Type" value="1" />"
L"</characteristic>"
L"</characteristic>"
L"</wap-provisioningdoc>";
銆銆
LPWSTR pszwXMLout = NULL;
HRESULT hr = DMProcessConfigXML(strFavoriteXml, CFGFLAG_PROCESS, &pszwXMLout);
銆銆
if ( pszwXMLout )
{
銆delete [] pszwXMLout;
銆pszwXMLout = NULL;
}
鐜板湪鐨?Windows Mobile 璁懼澶у鏁伴兘鎷ユ湁鐢?shù)璇濆拰鍏朵粬鏃牼U塊氫俊鐨勫姛鑳姐傚湪璁稿鎯呭喌涓嬶紝浣犳兂璁╀綘鐨勫簲鐢ㄧ▼搴忚窡榪欎簺閫氫俊鍔熻兘榪涜浜や簰銆備緥濡傦紝浣犳兂鍦ㄧ數(shù)璇濆搷璧風(fēng)殑鏃跺欙紝灝嗕綘鐨勫簲鐢ㄧ▼搴忔挱鏀鵑煶涔愮殑澹伴煶璋冨皬錛涙垨鑰呴渶瑕佺洿鎺ュ閫氫俊紜歡榪涜鍚勭鎿嶄綔銆傞偅涔堝紑鍙戣繖縐嶇被鍨嬬殑搴旂敤紼嬪簭寰寰姣旇緝鍥伴毦錛屾渶澶х殑闅劇偣鍦ㄤ簬嫻嬭瘯搴旂敤紼嬪簭銆?br>
涓轟簡瑙e喅嫻嬭瘯榪欑搴旂敤紼嬪簭鐨勫洶闅撅紝W(xué)indows Mobile 6 SDK 鍖呭惈浜?Cellular Emulator錛堣渹紿濅豢鐪熷櫒錛夈侰ellular Emulator 璁╀綘鑳藉鍦?Device Emulator 涓紝嫻嬭瘯浣犵殑搴旂敤紼嬪簭鍦ㄥ悇縐嶈渹紿濋氫俊鐨勬儏鍐典笅鐨勮涓恒?br>
Cellular Emulator 鏄竴涓己澶х殑嫻嬭瘯宸ュ叿錛屽畠鍙互鐢ㄤ簬嫻嬭瘯浣犵殑搴旂敤紼嬪簭鍦ㄨ渹紿濋氫俊鐘跺喌鍙樺寲鏃剁殑琛屼負銆傜敤 Cellular Emulator 鍙互鎵ц涓浜涚畝鍗曠殑嫻嬭瘯錛屽錛氬湪浠跨湡鍣ㄤ腑鎷ㄦ墦鐢?shù)璇濆Q屾帴鍚潵鐢?shù)鍜屾寕鏂數(shù)璇濆Q屽彂閫佸拰鎺ユ敹 SMS 淇℃伅絳夈備負浜嗚寮鍙戜漢鍛樺彲浠ユ祴璇曟洿澶嶆潅鐨勫姛鑳斤紝Cellular Emulator 榪樻敮鎸佸 SIM 閰嶇疆淇℃伅鐨勪慨鏀癸紝榪樻湁閫夋嫨2G緗戠粶榪樻槸3G緗戠粶銆傛墍鏈夎繖浜涙祴璇曞伐浣滈兘涓嶉渶瑕佺敤鍒頒竴鍙扮墿鐞嗚澶囥?/p>
瑕佽 Cellular Emulator 鍜?Device Emulator 鍙互涓璧烽厤鍚堜嬌鐢紝棣栧厛浣犻渶瑕佹妸浠栦滑鍏寵仈璧鋒潵銆?br>1. 璁頒笅 Cellular Emulator 宸︿笅瑙掔姸鎬佹爮鐨?COM 绔彛鍙楓傚 COM5銆?br>2. 鍦?Device Emulator 涓夋嫨“File-->Configure...”鑿滃崟欏癸紝鎵撳紑 Emulator Properties 瀵硅瘽妗嗐?br>3. 鍦?Emulator Properties 瀵硅瘽妗嗕腑閫夋嫨 Peripherals 閫夐」鍗°?br>4. 鎶婂垰鎵嶈涓嬬殑 COM 绔彛鍙瘋緭鍏ュ埌 Serial Port 0 鏂囨湰妗嗕腑銆傚鏋滀綘鍦ㄤ笅鎷夊垪琛ㄤ腑鎵句笉鍒頒綘鐨勭鍙e彿錛屽彲浠ヨ嚜宸辮緭鍏ヨ繘鍘匯?br>5. 鐐瑰嚮 OK 鎸夐挳淇濆瓨璁劇疆錛屽叧闂?Emulator Properties 瀵硅瘽妗嗐?br>6. 鐐瑰嚮“File-->Reset-->Soft”鑿滃崟欏癸紝瀵逛豢鐪熷櫒榪涜杞噸緗搷浣溿?br>
寰呬豢鐪熷櫒瀹屾垚閲嶇疆榪囩▼騫墮噸鏂板惎鍔ㄥ悗錛屼綘灝嗕細鐪嬪埌浠跨湡鍣ㄧ殑铚傜獫緗戠粶宸茬粡鍙敤浜嗐傚鏋滆繕鏄笉琛岋紝鍙兘鏄畨瑁呬簡 Windows Mobile 6 SDK 涔嬪悗錛屾病鏈夐噸鏂板惎鍔ㄧ郴緇熺殑鍘熷洜鍚с?br>
緇欎豢鐪熷櫒鎷ㄦ墦鐢?shù)璇?/strong>
鎵撳紑 Cellular Emulator 鐨?Call Manager 閫夐」鍗★紝鍦?Phone Number 鏂囨湰妗嗕腑杈撳叆浠繪剰涓涓數(shù)璇濆彿鐮侊紝鐐瑰嚮鏃佽竟鐨?Dial 鎸夐挳錛屼豢鐪熷櫒鐨勭數(shù)璇濋搩澹板皢鍝嶈搗錛屽茍鏄劇ず鏉ヨ嚜鎵杈撳叆鐨勭數(shù)璇濆彿鐮佺殑鏉ョ數(shù)銆傝繖鏃跺湪 Active Calls 鍒楄〃涓皢鍑虹幇浠跨湡鍣ㄤ笂鐨勬椿鍔ㄩ氳瘽錛?strong>Status 鏄劇ず涓?Incoming銆?br>鐢?272024榪欎釜鐢?shù)璇濆忥L(fēng)爜鍚戜豢鐪熷櫒鎷ㄦ墦鐢?shù)璇濆Q?br>
浠跨湡鍣ㄦ敹鍒扮數(shù)璇濆彿鐮佷負7272024鐨勬潵鐢?shù)锛?br>
浠庝豢鐪熷櫒鎷ㄦ墦鐢?shù)璇?/strong>
鍦?Preset Number 鍒楄〃涓彁渚涗簡4涓彲渚涙祴璇曠殑鐢?shù)璇濆忥L(fēng)爜銆?strong>Busy 琛ㄧず綰胯礬蹇欙紝Reject 琛ㄧず鎷掔粷鎺ュ惉錛?strong>Hang Up After Connect 琛ㄧず鎺ュ惉鍚庡啀鎸傛柇錛?strong>No Answer 琛ㄧず娌℃湁鍥炲簲銆傚皾璇曞湪浠跨湡鍣ㄤ腑鎷ㄦ墦7272021錛孋ellular Emulator 鐨?Active Calls 鍒楄〃灝嗘樉紺轟豢鐪熷櫒褰撳墠鐨勬椿鍔ㄩ氳瘽銆傜數(shù)璇濇帴閫氬悗鎸佺畫浜?0縐掗挓錛岀劧鍚庢寕鏂紝涔熷氨鏄?strong>Hang Up After Connect銆?br>

鍚戜豢鐪熷櫒鍙戦?SMS 淇℃伅
鎵撳紑 Cellular Emulator 鐨?SMS 閫夐」鍗★紝鍦?Send to device 鐨勫琛屾枃鏈涓緭鍏ョ煭淇″唴瀹癸紝鐒跺悗鐐瑰嚮 Send 鎸夐挳灝嗙煭淇″彂閫佽嚦浠跨湡鍣ㄣ?br>
浠跨湡鍣ㄥ皢鏀跺埌鏂扮煭淇★細
榪樺彲浠ヨ緗噸澶嶅彂閫併傞変腑 Repeatly 媯鏌ユ錛岃瀹氬ソ Interval錛堥棿闅旀椂闂達級鍜?Max Count錛堟渶澶ф暟鐩級錛岀劧鍚庡啀鐐瑰嚮 Send 鎸夐挳鍗沖彲銆傚鏋滀綘鍦ㄤ豢鐪熷櫒涓洖澶嶄簡淇℃伅錛屽皢浼氬湪 Cellular Emulator 鐨?Receive from device 鍒楄〃涓湅鍒頒綘鍥炲鐨勭煭淇°?br>
閫夋嫨緗戠粶
鎵撳紑 Cellular Emulator 鐨?Network 閫夐」鍗★紝鍙互閫夋嫨2G鎴栬?G緗戠粶錛屾柇寮 GPRS 榪炴帴錛屾煡鐪嬫暟鎹氶亾絳夈?br>
鎵ц鍜屾煡鐪?AT 鍛戒護
鎵撳紑 Cellular Emulator 鐨?nbsp;Injection 閫夐」鍗★紝榪欓噷鍙互鍚戜豢鐪熷櫒鍙戦?AT 鍛戒護鎴栦簨浠躲?br>
鎵撳紑 Cellular Emulator 鐨?nbsp;AT log 閫夐」鍗★紝鍙互鐪嬪埌鍒氭墠鎵鏈夊浠跨湡鍣ㄧ殑鎿嶄綔瀵瑰簲鐨?AT 鍛戒護銆?br>
浣跨敤閰嶇疆鏂囦歡
榪欓噷鍙互閫夋嫨浣跨敤鍝竴涓?SIM 閰嶇疆鏂囦歡錛屾枃浠跺唴瀹規(guī)槸 XML 鏍煎紡銆?br>
鎬葷粨
鏈変簡 Cellular Emulator 鐨勯厤鍚堬紝Device Emulator 鏄懼緱鏇村姞寮哄ぇ銆傜幇鍦?Windows Mobile 6 寮鍙戜漢鍛樺彲浠ヤ嬌鐢ㄤ豢鐪熷櫒榪涜寮鍙戝拰嫻嬭瘯錛岃屼笉闇瑕佽喘涔板悇縐嶇湡瀹炶澶囥傞仐鎲劇殑鏄紝Cellular Emulator 騫朵笉鏀寔 Windows Mobile 5.0 鍜?Windows Mobile 2003 鐨勪豢鐪熷櫒銆備笉榪囧ソ鍦?Windows Mobile 6 鐨?API 璺?Windows Mobile 5.0 鐨勭粷澶ч儴鍒嗕竴鏍鳳紝鎵浠ヤ綘鍙互鍦?Windows Mobile 6 鐨勪豢鐪熷櫒涓紑鍙戝拰璋冭瘯 Windows Mobile 5.0 鐨勫簲鐢ㄧ▼搴忋傚浜?Windows Mobile 2003 鍙兘嫻嬭瘯鏁堟灉娌℃湁閭d箞涓鑷達紝浣犱篃鍙互鑷繁灝濊瘯涓涓嬨?br>
鍙傝冿細
What's New for Developers in Windows Mobile 6
if (SUCCEEDED(SimReadPhonebookEntry(lphSim, SIM_PBSTORAGE_SIM, i+1, &phoneent)))
{
CONTACTSTRUCT tempContact = {0};
wcsncpy(tempContact.szName, phoneent.lpszText, 31); // 濮撳悕
wcsncpy(tempContact.szTelNum, phoneent.lpszAddress, 31); // 鐢?shù)璇?/p>
vContact.push_back(tempContact );
}
}
//鏈鍚庡埆蹇樹簡娓呯悊
SimDeinitialize(lphSim);
lphSim = NULL;
榪欓噷璇誨彇鐨勬椂鍊欑敤浜哾wTotal錛屾槸鍥犱負鍚湁緇忛獙鐨勪漢璇達紝sim鍗$殑瀛樺偍鍙兘涓嶈繛緇紝濡傛灉鐢╠wUsed鐨勮瘽錛屽彲鑳戒細鏈夐棶棰樸?br>
縐瘡涓涓嬶紝鏈夋椂闂村啀濂藉ソ鐪嬩竴涓媜utlook鑱旂郴浜虹殑銆?br>
鍙傝冩枃绔狅細
Pocket 涓幏鍙朣IM鍗′腑鑱旂郴浜轟俊鎭?br>http://blog.csdn.net/xulg1984/archive/2008/05/30/2497712.aspx
杞嚜: http://www.cnblogs.com/dotnetearthworm/archive/2009/02/02/1382488.html
.sln錛氳В鍐蟲柟妗堟枃浠訛紝涓鴻В鍐蟲柟妗堣祫婧愮鐞嗗櫒鎻愪緵鏄劇ず綆$悊鏂囦歡鐨勫浘褰㈡帴鍙f墍闇鐨勪俊鎭?
.csproj:欏圭洰鏂囦歡錛屽垱寤哄簲鐢ㄧ▼搴忔墍闇鐨勫紩鐢ㄣ佹暟鎹繛鎺ャ佹枃浠跺す鍜屾枃浠剁殑淇℃伅銆?
.aspx錛歐eb 紿椾綋欏電敱涓ら儴鍒嗙粍鎴愶細瑙嗚鍏冪礌錛圚TML銆佹湇鍔″櫒鎺т歡鍜岄潤鎬佹枃鏈級鍜岃欏電殑緙栫▼閫昏緫銆俈isual Studio 灝嗚繖涓や釜緇勬垚閮ㄥ垎鍒嗗埆瀛樺偍鍦ㄤ竴涓崟鐙殑鏂囦歡涓傝瑙夊厓绱犲湪.aspx 鏂囦歡涓垱寤恒?
.ascx錛欰SP.NET鐨勭敤鎴鋒帶浠訛紙涔熷彨鍋?#8220;pagelets”錛夛紝鏄綔涓轟竴縐嶅皝瑁呬簡鐗瑰畾鍔熻兘鍜岃涓猴紙榪欎袱鑰呰琚敤鍦╓eb搴旂敤紼嬪簭鐨勫悇縐嶉〉闈笂錛夌殑Web欏甸潰琚紑鍙戠殑銆備竴涓敤鎴鋒帶浠跺寘鍚簡HTML銆佷唬鐮佸拰鍏朵粬Web鎴栬呯敤鎴鋒帶浠剁殑緇勫悎錛屽茍鍦╓eb鏈嶅姟鍣ㄤ笂浠ヨ嚜宸辯殑鏂囦歡鏍煎紡淇濆瓨錛屽叾鎵╁睍鍚嶆槸*.ascx銆侫SP.NET閲岀殑緙虹渷閰嶇疆騫朵笉鍏佽Web瀹㈡埛绔氳繃URL鏉ヨ闂繖浜涙枃浠訛紝浣嗘槸榪欎釜緗戠珯鐨勫叾浠栭〉闈㈠彲浠ラ泦鎴愯繖浜涙枃浠墮噷鎵鍖呭惈鐨勫姛鑳姐?
.aspx.cs錛歐eb 紿椾綋欏電殑緙栫▼閫昏緫浣嶄簬涓涓崟鐙殑綾繪枃浠朵腑錛岃鏂囦歡縐頒綔浠g爜闅愯棌綾繪枃浠訛紙.aspx.cs錛夈?
.cs錛?綾繪ā鍧椾唬鐮佹枃浠躲備笟鍔¢昏緫澶勭悊灞傜殑浠g爜銆?
.asax錛欸lobal.asax 鏂囦歡錛堜篃鍙仛 ASP.NET 搴旂敤紼嬪簭鏂囦歡錛夋槸涓涓彲閫夌殑鏂囦歡錛岃鏂囦歡鍖呭惈鍝嶅簲 ASP.NET 鎴?HTTP 妯″潡寮曞彂鐨勫簲鐢ㄧ▼搴忕駭鍒簨浠剁殑浠g爜銆?
.config錛歐eb.config 鏂囦歡鍚戝畠浠墍鍦ㄧ殑鐩綍鍜屾墍鏈夊瓙鐩綍鎻愪緵閰嶇疆淇℃伅銆?
.aspx.resx/.resx錛氳祫婧愭枃浠訛紝璧勬簮鏄湪閫昏緫涓婄敱搴旂敤紼嬪簭閮ㄧ講鐨勪換浣曢潪鍙墽琛屾暟鎹傞氳繃鍦ㄨ祫婧愭枃浠朵腑瀛樺偍鏁版嵁錛屾棤闇閲嶆柊緙栬瘧鏁翠釜搴旂敤紼嬪簭鍗沖彲鏇存敼鏁版嵁銆?51aspx.com
.XSD:XML schema鐨勪竴縐?浠嶥TD,XDR鍙戝睍鍒癤SD
.pdb:PDB錛堢▼搴忔暟鎹簱錛夋枃浠朵繚鎸佺潃璋冭瘯鍜岄」鐩姸鎬佷俊鎭紝浠庤屽彲浠ュ紼嬪簭鐨勮皟璇曢厤緗繘琛屽閲忛摼鎺ャ?
.suo:瑙e喅鏂規(guī)鐢ㄦ埛閫夐」,璁板綍鎵鏈夊皢涓庤В鍐蟲柟妗堝緩绔嬪叧鑱旂殑閫夐」錛屼互渚垮湪姣忔鎵撳紑鏃訛紝瀹冮兘鍖呭惈鎮(zhèn)ㄦ墍鍋氱殑鑷畾涔夎緗?
.asmx錛?asmx鏂囦歡鍖呭惈 WebService 澶勭悊鎸囦護錛屽茍鐢ㄤ綔 XML Web services 鐨勫彲瀵誨潃鍏ュ彛鐐?51aspx銆?
.vsdisco錛堥」鐩彂鐜幫級鏂囦歡 鍩轟簬 XML 鐨勬枃浠訛紝瀹冨寘鍚負 Web 鏈嶅姟鎻愪緵鍙戠幇淇℃伅鐨勮祫婧愮殑閾炬帴 (URL-51aspx )銆?
.htc:涓涓狧TML鏂囦歡,鍖呭惈鑴氭湰鍜屽畾涔夌粍浠剁殑涓緋誨垪HTC鐗瑰畾鍏冪礌.htc鎻愪緵鍦ㄨ剼鏈腑implement緇勪歡鐨勬満鍒?/p>
鏉ユ簮錛?.Net涓枃紺懼尯錛?a >http://www.aspxcs.net/)
涓婇潰鏄垜鐪嬪埌鐨勪竴浜涗粙緇?榪欓噷鍐嶈ˉ鍏呬竴浜?
.clw 鏀寔ClassWizard
.ncb 鏀寔ClassView
.opt 淇濆瓨宸ヤ綔絀洪棿鐨勯厤緗?nbsp;
.aps 鏀寔ResourceView
.bsc 嫻忚鍣ㄤ俊鎭枃浠?nbsp;
.dsp 欏圭洰鏂囦歡
.dsw 宸ヤ綔絀洪棿鏂囦歡
.mak 澶栭儴鐨勫垱寤烘枃浠?nbsp;
.plg 寤虹珛鏃ュ織鏂囦歡
Let's analyze what a title like Learn Pascal in Three Days could mean:
Learn: In 3 days you won't have time to write several significant programs, and learn from your successes and failures with them. You won't have time to work with an experienced programmer and understand what it is like to live in that environment. In short, you won't have time to learn much. So they can only be talking about a superficial familiarity, not a deep understanding. As Alexander Pope said, a little learning is a dangerous thing.
Pascal: In 3 days you might be able to learn the syntax of Pascal (if you already knew a similar language), but you couldn't learn much about how to use the syntax. In short, if you were, say, a Basic programmer, you could learn to write programs in the style of Basic using Pascal syntax, but you couldn't learn what Pascal is actually good (and bad) for. So what's the point? Alan Perlis once said: "A language that doesn't affect the way you think about programming, is not worth knowing". One possible point is that you have to learn a tiny bit of Pascal (or more likely, something like Visual Basic or javascript) because you need to interface with an existing tool to accomplish a specific task. But then you're not learning how to program; you're learning to accomplish that task.
in Three Days: Unfortunately, this is not enough, as the next section shows.
Teach Yourself Programming in Ten Years
Researchers (Hayes, Bloom) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. There appear to be no real shortcuts: even Mozart, who was a musical prodigy at age 4, took 13 more years before he began to produce world-class music. In another genre, the Beatles seemed to burst onto the scene, appearing on the Ed Sullivan show in 1964. But they had been playing since 1957, and while they had mass appeal early on, their first great critical success, Sgt. Peppers, was released in 1967. Samuel Johnson thought it took longer than ten years: "Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price." And Chaucer complained "the lyf so short, the craft so long to lerne."
Here's my recipe for programming success:
Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in ten years.
Talk to other programmers; read other programs. This is more important than any book or training course.
Program. The best kind of learning is learning by doing. To put it more technically, "the maximal level of performance for individuals in a given domain is not attained automatically as a function of extended experience, but the level of performance can be increased even by highly experienced individuals as a result of deliberate efforts to improve." (p. 366) and "the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors." (p. 20-21) The book Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference for this viewpoint.
If you want, put in four years at a college (or more at a graduate school). This will give you access to some jobs that require credentials, and it will give you a deeper understanding of the field, but if you don't enjoy school, you can (with some dedication) get similar experience on the job. In any case, book learning alone won't be enough. "Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter" says Eric Raymond, author of The New Hacker's Dictionary. One of the best programmers I ever hired had only a High School degree; he's produced a lot of great software, has his own news group, and through stock options is no doubt much richer than I'll ever be.
Work on projects with other programmers. Be the best programmer on some projects; be the worst on some others. When you're the best, you get to test your abilities to lead a project, and to inspire others with your vision. When you're the worst, you learn what the masters do, and you learn what they don't like to do (because they make you do it for them).
Work on projects after other programmers. Be involved in understanding a program written by someone else. See what it takes to understand and fix it when the original programmers are not around. Think about how to design your programs to make it easier for those who will maintain it after you.
Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction (like Lisp or ML), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), one that supports coroutines (like Icon or Scheme), and one that supports parallelism (like Sisal).
Remember that there is a "computer" in "computer science". Know how long it takes your computer to execute an instruction, fetch a word from memory (with and without a cache miss), read consecutive words from disk, and seek to a new location on disk. (Answers here.)
Get involved in a language standardization effort. It could be the ANSI C++ committee, or it could be deciding if your local coding style will have 2 or 4 space indentation levels. Either way, you learn about what other people like in a language, how deeply they feel so, and perhaps even a little about why they feel so.
Have the good sense to get off the language standardization effort as quickly as possible.
With all that in mind, its questionable how far you can get just by book learning. Before my first child was born, I read all the How To books, and still felt like a clueless novice. 30 Months later, when my second child was due, did I go back to the books for a refresher? No. Instead, I relied on my personal experience, which turned out to be far more useful and reassuring to me than the thousands of pages written by experts.
Fred Brooks, in his essay No Silver Bullets identified a three-part plan for finding great software designers:
Systematically identify top designers as early as possible.
Assign a career mentor to be responsible for the development of the prospect and carefully keep a career file.
Provide opportunities for growing designers to interact and stimulate each other.
This assumes that some people already have the qualities necessary for being a great designer; the job is to properly coax them along. Alan Perlis put it more succinctly: "Everyone can be taught to sculpt: Michelangelo would have had to be taught how not to. So it is with the great programmers".
So go ahead and buy that Java book; you'll probably get some use out of it. But you won't change your life, or your real overall expertise as a programmer in 24 hours, days, or even months.
References
Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.
Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.
Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.
Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.
http://www.norvig.com/
TCHAR szPath[MAX_PATH];
HANDLE hProcess = OpenProcess(0, FALSE, pe.th32ProcessID);鍦?/span>Windows Mobile 5.0SDK鐨?/span>HelloSMS渚嬪瓙涓紝鍙戦佺煭淇$殑浠g爜鏄繖鏍峰啓鐨?/span>
void SendSMS(BOOL bSendConfirmation, BOOL bUseDefaultSMSC, LPCTSTR lpszSMSC, LPCTSTR lpszRecipient, LPCTSTR lpszMessage)

{
SMS_HANDLE smshHandle;
SMS_ADDRESS smsaSource;
SMS_ADDRESS smsaDestination;
TEXT_PROVIDER_SPECIFIC_DATA tpsd;
SMS_MESSAGE_ID smsmidMessageID;
// try to open an SMS Handle
if(FAILED(SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &smshHandle, NULL)))
{
MessageBox(NULL,
(LPCTSTR)LoadString(ghInstance, IDS_ERROR_SMSOPEN, 0, 0),
(LPCTSTR)LoadString(ghInstance, IDS_CAPTION_ERROR, 0, 0),
MB_OK | MB_ICONERROR);
return;
}
// Create the source address
if(!bUseDefaultSMSC)
{
smsaSource.smsatAddressType = SMSAT_INTERNATIONAL;
_tcsncpy(smsaSource.ptsAddress, lpszSMSC, SMS_MAX_ADDRESS_LENGTH);
}
// Create the destination address
smsaDestination.smsatAddressType = SMSAT_INTERNATIONAL;
_tcsncpy(smsaDestination.ptsAddress, lpszRecipient, SMS_MAX_ADDRESS_LENGTH);
// Set up provider specific data
memset(&tpsd, 0, sizeof(tpsd));
tpsd.dwMessageOptions = bSendConfirmation ? PS_MESSAGE_OPTION_STATUSREPORT : PS_MESSAGE_OPTION_NONE;
tpsd.psMessageClass = PS_MESSAGE_CLASS1;
tpsd.psReplaceOption = PSRO_NONE;
tpsd.dwHeaderDataSize = 0;
// Send the message, indicating success or failure
if(SUCCEEDED(SmsSendMessage(smshHandle, ((bUseDefaultSMSC) ? NULL : &smsaSource),
&smsaDestination, NULL, (PBYTE) lpszMessage,
_tcslen(lpszMessage) * sizeof(TCHAR), (PBYTE) &tpsd,
sizeof(TEXT_PROVIDER_SPECIFIC_DATA), SMSDE_OPTIMAL,
SMS_OPTION_DELIVERY_NONE, &smsmidMessageID)))
{
MessageBox(NULL,
(LPCTSTR)LoadString(ghInstance, IDS_SMSSENT, 0, 0),
(LPCTSTR)LoadString(ghInstance, IDS_CAPTION_SUCCESS, 0, 0),
MB_OK);
}
else
{
MessageBox(NULL,
(LPCTSTR)LoadString(ghInstance, IDS_ERROR_SMSSEND, 0, 0),
(LPCTSTR)LoadString(ghInstance, IDS_CAPTION_ERROR, 0, 0),
MB_OK | MB_ICONERROR);
}
// clean up
VERIFY(SUCCEEDED(SmsClose(smshHandle)));
}
榪欐浠g爜鍦ㄤ竴鑸儏鍐典笅鏄繍琛屾紜殑錛屽浜庢墜鏈轟笌鎵嬫満鐨勫彂閫佹槸涓嶅瓨鍦ㄩ棶棰樼殑錛屼絾鏄笌SP鐨勪氦浜掑湪鏌愪簺鐪佸尯灝卞瓨鍦ㄧ煭淇″彂閫佷笉鍑哄幓鐨勬儏鍐點?span lang=EN-US>
涓轟簡鏇村ソ鐨勭悊瑙h繖孌典唬鐮侊紝鎴戜滑鍏堟潵鐔熸?zhèn)変竴涓?span lang=EN-US style="COLOR: black">SmsSendMessage鍙婂悇涓弬鏁般?span lang=EN-US>
SmsSendMessage
鍔熻兘錛?/span>Use the SmsSendMessage function to create and send an Short Message Service (SMS) message.錛堝垱寤哄拰鍙戦佺煭淇★紝浣嗙煭淇″彂閫佸悗騫朵笉淇濆瓨鍒板彂浠剁涓級
鍘熷瀷錛?span lang=EN-US>
HRESULT SmsSendMessage (
const SMS_HANDLE smshHandle, // 璋冪敤SmsOpen鏃惰幏寰楃殑鐭俊鍙ユ焺
const SMS_ADDRESS * const psmsaSMSCAddress, //鎸囧悜鐭俊涓績鍙風(fēng)爜鐨勫湴鍧
const SMS_ADDRESS * const psmsaDestinationAddress, // 鍙戦佺殑鐩殑鍦板潃
const SYSTEMTIME * const pstValidityPeriod, // 鍙戦佹椂闂寸殑鏈夋晥鏈?span lang=EN-US>
const BYTE * const pbData, // 淇℃伅鐨勫唴瀹歸儴鍒?span lang=EN-US>
const DWORD dwDataSize,// 淇℃伅鍐呭鐨勯暱搴?span lang=EN-US>
const BYTE * const pbProviderSpecificData, //榪愯惀鍟嗙殑闄勫姞鏁版嵁
const DWORD dwProviderSpecificDataSize, // 闄勫姞鏁版嵁鐨勯暱搴?span lang=EN-US>
const SMS_DATA_ENCODING smsdeDataEncoding, // 鐭俊緙栫爜
const DWORD dwOptions, // 鍏朵粬閫夐」
SMS_MESSAGE_ID * psmsmidMessageID); // 鐢ㄤ簬寰楀埌緋葷粺鍥炴墽鐨勪俊鎭?span lang=EN-US>
錛堝叿浣撲粙緇嶅彲鏌ョ湅http://msdn.microsoft.com/en-us/library/aa455068.aspx錛?span lang=EN-US>
鍦ㄥ疄闄呭簲鐢ㄤ腑鐭俊鍙戦佷笉鍑哄幓錛屼絾鏄?span lang=EN-US>SmsSendMessage鐨勮繑鍥炲兼槸S_OK鍊箋傚湪涓浜涙枃绔犱腑鏈変漢榪欐牱璁や負鏄煭淇$紪鐮佺殑闂閫犳垚鐨勩?span lang=EN-US>
濡傛灉緙栫爜鏍煎紡涓嶅鍙兘閫犳垚鐭俊涓績緗戝叧鎶婄煭淇$粰鍚炴帀鐨勬儏鍐碉紝紼嬪簭铏界劧璋冪敤鎴愬姛錛屼絾鏄氨鏄洰鏍囧彿鐮佹敹涓嶅埌鐭俊銆傚嚱鏁板弬鏁頒腑鐨勫悗涓変釜鍙傛暟鍙互涓嶇敤鎴栬榛樿鍊奸兘鍙互銆?span lang=EN-US>
璧峰垵鎴戜篃鏄涓鴻繖涓湴鏂歸犳垚鐨勶紝寰堟槸鍏村銆傜煭淇$殑鍥炲鍐呭鎭頒負瀛楁瘝錛屾垜璇互涓虹煭淇″唴瀹規(guī)鏃舵槸7-BIT鐨勭煭娑堟伅錛岀煭淇$綉鍏蟲妸鐭俊緇欏悶鎺変簡錛岄犳垚鐩爣鍙風(fēng)爜鏀朵笉鍒扮煭淇°傚湪緇冧範涓嵈涔熼槾宸槼閿欑殑鎴愬姛浜嗐傚緢楂樺叴鐨勬妸鐞嗙敱褰掑埌浜嗚繖涓湴鏂廣傚茍榪欐牱鎬葷粨錛?/span>SmsSendMessage鍙互鏀寔7-bit鐨?span lang=EN-US>ASCII鐮佺殑鐭秷鎭紝涔熸敮鎸?span lang=EN-US>16-bit鐨?span lang=EN-US>unicode鐨勭煭娑堟伅銆備絾鍐呭涓?span lang=EN-US>ASCII鐨勬椂鍊欙紝鐭俊緙栫爜涓?span lang=EN-US style="COLOR: black"> SMSDE_GSM鎴?span lang=EN-US>SMSDE_OPTIMAL錛屽綋鍐呭涓嶅叏鏄?/span>ASCII鐨勬椂鍊欙紝鐭俊緙栫爜涓?span lang=EN-US style="COLOR: black">SMSDE_GSM鎴?span lang=EN-US>SMSDE_OPTIMAL銆傛墍浠ュ洖澶嶅唴瀹規(guī)敼涓烘眽瀛楀嵆鍙?span lang=EN-US>
浣嗘槸榪欐牱瀵逛箞錛熻搗鍒濇垜璁や負鎴戠殑瑙i噴寰堝悎鐞?span lang=EN-US>.浣嗘槸鎴戝嵈鍙戠幇鎴戠殑涓涓弬鏁頒笌鍘熸潵鐨勭▼搴忎笉涓鏍?span lang=EN-US>.
鏄垜鍦ㄥ皾璇曚腑鏃犳剰淇敼浜嗕竴涓弬鏁?span lang=EN-US>,灝?span lang=EN-US>
tpsd.psMessageClass = PS_MESSAGE_CLASS1;
淇敼涓轟簡
tpsd.psMessageClass = PS_MESSAGE_CLASSUNSPECIFIED;
榪欐槸鍙戦佺煭淇′腑鐨勮繍钀ュ晢鐨勬寚瀹氭暟鎹?/span>TEXT_PROVIDER_SPECIFIC_DATA,瀹冪殑鍙傛暟psMessageClass鏄寚
Text Short Message Service (SMS) messages with the appropriate flag can replace previously received notifications with a similar flag and originating address.
瀹冩湁浠ヤ笅浜斾釜鍊?/span>:
PS_MESSAGE_CLASS0: The message should be displayed immediately but not stored. The MS shall send an acknowledgement to the service center when the message has successfully reached the MS. 錛堣鎺ュ彈鍚庣珛鍗蟲樉紺轟絾涓嶅瓨鍌?/span>(縐頒負闂俊)銆傞渶瑕佸悜SMSC鍙戦佺‘璁や俊鎭傦級
PS_MESSAGE_CLASS1錛?/span>The message should be stored and an acknowledgement should be sent to the
PS_MESSAGE_CLASS2錛?/span>The message should be transferred to the SMS data field in the subscriber identity module (SIM) before an acknowledgement is sent to the
PS_MESSAGE_CLASS3錛?/span>When the message has successfully reached the destination and can be stored, an acknowledgement is sent to the
PS_MESSAGE_CLASSUNSPECIFIED錛?/span>The message Class is not set in the outgoing or incoming message. 錛堝鍙戝嚭鎴栨敹鍒扮殑鐭俊涓嶈繘琛岃緗級
鍒嗘瀽浠ヤ笂浜斾釜鍊鹼紝鍓嶅洓涓兼湁涓涓叡鍚岀殑鐗圭偣錛岄兘闇瑕佸悜SMSC鍙戦佺‘璁ゃ傝屾渶鍚庝竴涓兼病鏈夎瀹氥?/span>
榪欎釜鍊肩殑鏀瑰姩錛岃В鍐充簡鎴戞墍閬囧埌鐨勯棶棰樸備絾絀跺叾鍘熷洜,鎴戞湁浜涙兂涓嶉氫負浠涔?
浣嗘槸鍦ㄥ疄闄呭簲鐢ㄤ腑錛屽嚭鐜頒簡tmail.exe鐨勫紓甯搞備笉鐭ラ亾鏄繖涓肩殑鍙樺姩甯︽潵鐨勯棶棰橈紝榪樻槸瀹為檯妯″潡涓瓨鍦ㄧ殑闂銆傝繕闇瑕佺戶緇爺絀朵竴涓嬨?br>
濡傛灉澶у鏈夌煡閬撶殑,緇欎簺寤鴻鍝?
Hibernate
This is the amount of memory the shell tries to keep free at all times. If the amount of free memory falls below this value then the low memory check routine will try to free up memory. It will do this by first sending WM_HIBERNATE to all valid applications. When an application receives this message it should try to free as many resources as possible. When the low memory check routine runs again and the amount of free memory is still below the hibernate level then the shell will try to close the least recently used (LRU) application by sending a WM_CLOSE message. If the low memory check routine runs yet again and the amount of free memory is still below the hibernate level then the shell will call TerminateProcess on the LRU application that it last sent the WM_CLOSE message to.
鎴戝榪欐璇濈殑鐞嗚В鏄細褰撶┖闂插唴瀛樺皬浜嶩ibernate鏃訛紝緋葷粺渚夸細灝濊瘯閲婃斁鍐呭瓨銆傞鍏堜粬浼氬悜鎵鏈夋湁鏁堢殑紼嬪簭鍙戦乄M_HIBERNATE銆傚簲鐢ㄧ▼搴忔敹鍒拌娑堟伅鍚庯紝浼氬敖閲忛噴鏀捐祫婧愭潵閲婃斁鍐呭瓨銆傚鏋滆繕浣庝簬榪欎釜鍊肩殑璇濓紝灝嗗彂閫乄M_CLOSE娑堟伅緇欐渶榪戝緢灝戜嬌鐢ㄧ殑紼嬪簭銆傚鏋滆繕浣庝簬璇ュ肩殑錛屽氨寮鴻鍏抽棴璇ョ▼搴忎簡銆?br>
榪欎釜鏂規(guī)硶浼間箮鏈夋晥錛屼絾鏄敤鎴峰啀璧鋒潵紼嬪簭鐨勮瘽錛岃繕鏄竴鏍風(fēng)殑鏁堟灉錛屽茍涓嶆槸杈懼埌浜嗕粈涔堥噴鏀懼唴瀛樼殑鏁堟灉銆傚浣曡褰曟渶榪戝緢灝戜嬌鐢ㄧ殑紼嬪簭錛岃繖涓槸涓嶆槸鏈変粈涔堟柟娉曡幏寰楀憿錛?br>
灝卞彲浠ュ儚緋葷粺鎻愮ず鐨勯偅鏍鳳紝鍐呭瓨涓嶈凍錛岃閲婃斁涓浜涘唴瀛樸傛墜宸ュ仛涓浜涙瘮杈冨ソ銆?br>
涔熺湅浜嗕竴浜涚浉榪戠殑紼嬪簭鐨勫仛娉曪紝浼間箮鏁堟灉涔熸病鏈夊ぇ瀹惰鐨勯偅涔堝ソ銆?br>
鍦?a target=_blank>How the Windows Mobile 5.0 Shell Handles Low Memory Situations鐨勬渶鍚庯紝榪欐牱鍐欑殑
What can my Application do?
The best thing your application can do when faced with a low memory situation is to play nicely with the rest of the device.
1銆両f your application receives a WM_HIBERNATE message free up any resources not absolutely required.
2銆両f you are planning on allocating a large amount of memory (or if a large allocation fails) you should call SHCloseApps, which will invoke the shell low memory check routine and will try to ensure that enough free memory exists. See below for an example:
#define MIN_MEMORY_TO_RUN 2*1024*1024
MEMORYSTATUS mst;
mst.dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&mst);
If (mst.dwAvailPhys < MIN_MEMORY_TO_RUN)


{
// Try to free memory by asking Shell to shutdown apps
if (!SHCloseApps(MIN_MEMORY_TO_RUN))

{
// Handle the case where memory could not be freed
…

渚嬪瓙錛?br>
void ShowError()

{
DWORD dwError = GetLastError();
HLOCAL hlocal = NULL;
// Use the default system locale since we look for Windows messages.
// Note: this MAKELANGID combination has 0 as value
DWORD systemLocale = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);
BOOL fOk = FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS |
FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL, dwError, systemLocale,
(PTSTR) &hlocal, 0, NULL);

if (!fOk)
{
// Is it a network-related error?
HMODULE hDll = LoadLibraryEx(TEXT("netmsg.dll"), NULL,
DONT_RESOLVE_DLL_REFERENCES);

if (hDll != NULL)
{
fOk = FormatMessage(
FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS |
FORMAT_MESSAGE_ALLOCATE_BUFFER,
hDll, dwError, systemLocale,
(PTSTR) &hlocal, 0, NULL);
FreeLibrary(hDll);
}
}
if (fOk && (hlocal != NULL))
{
OutputDebugString((PCTSTR) LocalLock(hlocal));
LocalFree(hlocal);
}
}
榪欎釜鏄功涓殑渚嬪瓙鐨勪唬鐮侊紝鎴戝彧鏄皢瀹冨綊緇撲負浜嗕竴涓嚱鏁癊rrorShow銆傝繖鏍鋒垜浠湪涓涓嚱鏁扮殑鍚庨潰璋冪敤錛岀洿鎺ュ彲浠ョ煡閬撻敊璇殑鍘熷洜銆備笉榪囩幆澧冩垜鏄湪smart device 鐨凞EBUG鐜涓嬭皟鏃剁殑錛孫utputDebugString浼氳緭鍑虹浉搴旂殑瀛楃涓層?br>
榪欎釜渚嬪瓙涓悓鏃跺睍紺轟簡FormatMessage鐨勪袱縐嶇敤娉曘傝瀵熶竴涓嬬浜屼釜鍙傛暟灝辨槑鐧戒簡銆?br>
visual studio 涔熸彁渚涗簡涓涓煡璇㈤敊璇殑灝忓伐鍏鳳紝涓篍rror Lookup銆傞氳繃浠ヤ笂鐨勭ず渚嬶紝鎴戜滑灝辯煡閬撳叾鐩稿簲鐨勫伐浣滃師鐞嗗憿銆?br>
榪欐湰涔︾殑婧愮爜鐨勪笅杞藉湴鍧錛?a >http://wintellect.com/Books.aspx
澶у濡傛灉瀵箇indows 緙栫▼鎰熷叴瓚g殑璇濓紝涓嶅Θ涓嬫潵鐪嬬湅銆?br>


| // 閫夋嫨鏂囦歡 CFileDialog fileDlg(TRUE, "*.txt", "*.txt", NULL, "鏂囨湰鏂囦歡 (*.txt)|*.txt||", this); fileDlg.m_ofn.Flags |= OFN_FILEMUSTEXIST; fileDlg.m_ofn.lpstrTitle = "閫氳繃鍐呭瓨鏄犲皠鏂囦歡璇誨彇鏁版嵁"; if (fileDlg.DoModal() == IDOK) { 銆// 鍒涘緩鏂囦歡瀵硅薄 銆HANDLE hFile = CreateFile(fileDlg.GetPathName(), GENERIC_READ | GENERIC_WRITE, 銆銆銆0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 銆if (hFile == INVALID_HANDLE_VALUE) 銆{ 銆銆TRACE("鍒涘緩鏂囦歡瀵硅薄澶辮觸,閿欒浠g爜:%d\r\n", GetLastError()); 銆銆return; 銆} 銆// 鍒涘緩鏂囦歡鏄犲皠瀵硅薄 銆HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL); 銆if (hFileMap == NULL) 銆{ 銆銆TRACE("鍒涘緩鏂囦歡鏄犲皠瀵硅薄澶辮觸,閿欒浠g爜:%d\r\n", GetLastError()); 銆銆return; 銆} 銆// 寰楀埌緋葷粺鍒嗛厤綺掑害 銆SYSTEM_INFO SysInfo; 銆GetSystemInfo(&SysInfo); 銆DWORD dwGran = SysInfo.dwAllocationGranularity; 銆// 寰楀埌鏂囦歡灝哄 銆DWORD dwFileSizeHigh; 銆__int64 qwFileSize = GetFileSize(hFile, &dwFileSizeHigh); 銆qwFileSize |= (((__int64)dwFileSizeHigh) << 32); 銆// 鍏抽棴鏂囦歡瀵硅薄 銆CloseHandle(hFile); 銆// 鍋忕Щ鍦板潃 銆__int64 qwFileOffset = 0; 銆// 鍧楀ぇ灝?br>銆DWORD dwBlockBytes = 1000 * dwGran; 銆if (qwFileSize < 1000 * dwGran) 銆銆dwBlockBytes = (DWORD)qwFileSize; 銆銆while (qwFileOffset > 0) 銆銆{ 銆銆銆// 鏄犲皠瑙嗗浘 銆銆銆LPBYTE lpbMapAddress = (LPBYTE)MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS, 銆銆銆銆銆銆(DWORD)(qwFileOffset >> 32), (DWORD)(qwFileOffset & 0xFFFFFFFF), 銆銆銆銆銆銆dwBlockBytes); 銆銆銆if (lpbMapAddress == NULL) 銆銆銆{ 銆銆銆銆TRACE("鏄犲皠鏂囦歡鏄犲皠澶辮觸,閿欒浠g爜:%d\r\n", GetLastError()); 銆銆銆銆return; 銆銆銆} 銆銆銆// 瀵規(guī)槧灝勭殑瑙嗗浘榪涜璁塊棶 銆銆銆for(DWORD i = 0; i < dwBlockBytes; i++) 銆銆銆銆BYTE temp = *(lpbMapAddress + i); 銆銆銆銆// 鎾ゆ秷鏂囦歡鏄犲儚 銆銆銆銆UnmapViewOfFile(lpbMapAddress); 銆銆銆銆// 淇鍙傛暟 銆銆銆銆qwFileOffset += dwBlockBytes; 銆銆銆銆qwFileSize -= dwBlockBytes; 銆銆} 銆銆// 鍏抽棴鏂囦歡鏄犲皠瀵硅薄鍙ユ焺 銆銆CloseHandle(hFileMap); 銆銆AfxMessageBox("鎴愬姛瀹屾垚瀵規(guī)枃浠剁殑璁塊棶"); } |
| 鍖轟繚鎶ゅ睘鎬?/td> | 璇存槑 |
| SEC_COMMIT | 涓哄尯涓殑鎵鏈夐〉闈㈠湪鍐呭瓨涓垨紓佺洏欏甸潰鏂囦歡涓垎閰嶇墿鐞嗗瓨鍌ㄥ櫒 |
| SEC_IMAGE | 鍛婄煡緋葷粺錛屾槧灝勭殑鏂囦歡鏄竴涓彲縐繪鐨凟XE鏂囦歡鏄犲儚 |
| SEC_NOCACHE | 鍛婄煡緋葷粺錛屾湭灝嗘枃浠剁殑浠諱綍鍐呭瓨鏄犲皠鏂囦歡鏀懼叆楂橀熺紦瀛橈紝澶氫緵紜歡璁懼椹卞姩紼嬪簭寮鍙戜漢鍛樹嬌鐢?/td> |
| SEC_RESERVE | 瀵逛竴涓尯鐨勬墍鏈夐〉闈㈣繘琛屼繚鐣欒屼笉鍒嗛厤鐗╃悊瀛樺偍鍣?/td> |
BOOL WriteFile(
HANDLE hFile, // 鏂囦歡鍙ユ焺
LPCVOID lpBuffer, // 鍖呭惈鍐欏悜鏂囦歡鐨勬暟鎹?/span>
DWORD nNumberOfBytesToWrite, // 鏁版嵁鍖呭惈鐨勫瓧絎︿覆鐨勪釜鏁?/span>
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
絎竴嬈℃垜鍐欑殑紼嬪簭寰堢畝鍗?/span>
BOOL WriteOwnFile(TCHAR* pFileName, TCHAR* pBuffer, DWORD dwLen)
{
HANDLE hFile = CreateFile(pFileName,
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
錛夛紱
if (INVALID_HANDLE_VALUE != hFile)
{
DWORD dwSize = 0;
WriteFile(hFile, pBuffer, dwLen, &dwSize, NULL );
CloseHandle(hFile);
return TRUE;
}
return FALSE;
}
榪欐牱鏄畬鎴愪簡錛屼絾鏄啓鍑烘潵鐨勬枃浠舵槸涔辯爜銆傛墍浠ユ病鏈夎繘琛屽瓧絎︾殑杞崲錛屾垜浠渶瑕佸皢pBuffer榪涜杞崲銆傝繖灝辮鐢ㄥ埌浜?span>WideCharToMultiByte.濡備綍鐢ㄥ憿錛?/span>
棣栧厛鎴戠殑鏂規(guī)硶姣旇緝絎紝鎴戞槸榪欎箞鐢ㄧ殑錛?/span>
char* pchBuffer = new char[dwLen+1];
WideCharToMultiByte(CP_ACP, NULL, pBuffer, -1, pchBuffer, dwLen+1, NULL, FALSE );
WriteFile(hFile, pBuffer, dwLen+1, &dwSize, NULL );
Delete[] pchBuffer;
姝ゆ椂娉ㄦ剰錛屾垜鍦?span>WriteFile涓敤浜?span>dwLen+1銆傜粨鏋滃氨鏄湪鏂囦歡鐨勬湯灝懼嚭鐜頒簡涔辯爜錛屾濂藉涓涓貢鐮佸嚭鏉ャ傛墍浠?span>WriteFile涓?span>nNumberOfBytesToWrite鏄啓鐨勫瓧絎︿覆鐨勬暟鐩紝鏄笉鍖呮嫭’\
榪欎釜鏂規(guī)硶絎紝鏄洜涓烘垜浠殑鍑芥暟鍙互緙╁噺涓轟袱涓弬鏁般傛槸鍥犱負濡備笅榪欎箞鍐欐椂錛?span>dwLen鏄墍瑕佽漿鎹㈢殑瀛楃涓茬殑涓暟錛屾鏃惰漿鎹㈢殑瀛楃涓叉槸鍖呮嫭’\
DWORD dwLen = WideCharToMultiByte(CP_ACP, NULL, pBuffer, -1, NULL, NULL, NULL, FALSE );
鎵浠ユ垜浠啀鏉ョ湅涓涓嬫敼鍐欎互鍚庣殑浠g爜
BOOL WriteOwnFile(TCHAR* pFileName, TCHAR* pBuffer)
{
HANDLE hFile = CreateFile(pFileName,
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
錛夛紱
if (INVALID_HANDLE_VALUE != hFile)
{
DWORD dwSize = 0;
DWORD dwLen = WideCharToMultiByte(CP_ACP, NULL, pBuffer, -1, NULL, NULL, NULL, FALSE );
char* pchBuffer = new char[dwLen];
WideCharToMultiByte(CP_ACP, NULL, pBuffer, -1, pchBuffer, dwLen, NULL, FALSE );
WriteFile(hFile, pBuffer, dwLen+1, &dwSize, NULL );
delete[] pchBuffer;
CloseHandle(hFile);
return TRUE;
}
return FALSE;
}
榪欐牱鎰熻浠g爜濂界湅澶氫簡銆?/span>
瀵逛簬絎簩涓棶棰橈紝鏂囦歡鎵撳紑鐨勬椂鍊欐枃浠跺垱寤哄け璐ワ紝榪樻病鏈夋兂濂藉姙娉曡В鍐熾傛垜鍦ㄦ兂鏄笉鏄垜鐨勬煇浜涜鐭ュ瓨鍦ㄩ棶棰橈紝鏂囦歡鎵撳紑鐨勬椂鍊欙紝鏄惁鍙互鐢?/span>CreateFile鏉ユ墦寮鍛紵
HWND hwnd,
SHCHANGENOTIFYENTRY * pshcne
);
鍏朵腑,hwnd,涓烘帴鏀?/span>change notification鐨勭獥鍙?/span>;
pshcne鏄竴涓寚鍚?/span>SHCHANGENOTIFYENTRY緇撴瀯鐨勬寚閽?/span>,瀹冪敤鏉ユ寚鏄庣獥鍙f帴鏀剁殑change notification鐨勭被鍨?/span>.濡傛灉璁句負NULL,紿楀彛灝嗘帴鏀?/span>all file system, network 鍜?/span> media綾誨瀷鐨?/span>notifications.
SHCHANGENOTIFYENTRY鏄粈涔堟牱鐨勪竴涓粨鏋?/span>,鎴戜滑鐪嬩竴涓嬪畠鐨勫畾涔?/span>
typedef struct tagSHCHANGENOTIFYENTRY {
DWORD dwEventMask;
LPTSTR pszWatchDir;
BOOL fRecursive;
} SHCHANGENOTIFYENTRY;
dwEventMask 鎸囧畾鍙戠敓浠涔堟椂闂存潵鍙戦?/span>notification 娑堟伅
pszWatchDir 鎸囧畾鐩戞帶璺緞錛岃鍊間負NULL鐨勬儏鍐典笅錛屾槸鐩戞帶鎵鏈夌殑鏂囦歡銆?/span>
fRecursive鎸囧畾鏄惁鍙洃鎺ф寚瀹氳礬寰勮繕鏄洃鎺ф寚瀹氳礬寰勫強鍏跺瓙鏂囦歡澶廣?/span>
鐭ラ亾浜嗚繖浜涳紝鎴戜滑涓嶅Θ鍐欎竴涓繖鏍風(fēng)殑鍑芥暟錛屾潵鍚姩鏂囦歡鐩戞帶銆?/span>
浠g爜濡備笅錛?/span>
BOOL StartFileMonitor(HWND hWnd, LPTSTR lpFilePath)
{
SHCHANGENOTIFYENTRY schneNotifyEntry;
schneNotifyEntry.dwEventMask = SHCNE_ALLEVENTS;
schneNotifyEntry.pszWatchDir = lpFilePath;
schneNotifyEntry.fRecursive = TRUE;
return SHChangeNotifyRegister(hWnd, &schneNotifyEntry);
}
2銆佸浣曞鐞?/span>WM_FILECHANGEINFO娑堟伅
WM_FILECHANGEINFO 涓殑鍙傛暟lParam錛屾寚鍚?/span>FILECHANGENOTIFY錛屽惈鏈夌浉鍏崇殑鏁版嵁銆傛墍浠ユ垜浠湪鏀跺埌璇ユ秷鎭悗錛屽厛浣滅殑涓閮ㄦ搷浣滃氨鏄?/span>
FILECHANGENOTIFY *lpfcn = (FILECHANGENOTIFY*)lParam;
FILECHANGENOTIFY鐨勭粨鏋勪負錛?/span>
typedef struct tagFILECHANGENOTIFY {
DWORD dwRefCount;
FILECHANGEINFO fci;
} FILECHANGENOTIFY;
鎴戜滑涓昏鐢ㄥ埌浜嗗叾涓殑fci鍙傛暟銆?/span>
FILECHANGEINFO鐨勭粨鏋勪負錛?/span>
struct _FILECHANGEINFO {
DWORD cbSize;
LONG wEventId;
ULONG uFlags;
DWORD dwItem1;
DWORD dwItem2;
DWORD dwAttributes;
FILETIME ftModified;
ULONG nFileSize;
} FILECHANGEINFO, *LPFILECHANGEINFO;
dwEventId 涓?/span>SHCHANGENOTIFYENTRY緇撴瀯涓殑dwEventMask瀵瑰簲銆?/span>
dwItem1,dwItem2鏄簨浠朵緷璧栫殑鍊鹼紝閲岄潰鍖呮嫭浜嗘垜浠渶瑕佺殑鏂囦歡鐨勫畬鏁磋礬寰勩傚鏋滄槸榪涜鍒涘緩鏂囦歡鐨勬搷浣滐紝鍒?/span>dwItem1鏄垱寤哄悗鏂囦歡鐨勫畬鏁磋礬寰勶紝濡傛灉鏄鏂囦歡榪涜閲嶆柊鍛藉悕鎿嶄綔鐨勮瘽錛屽垯dwItem2鏄慨鏀瑰悗鏂囦歡鐨勫畬鏁磋礬寰勩傛澶勫鍏朵粬鍙傛暟涓嶅仛浠嬬粛錛屽ぇ瀹墮渶瑕佺殑璇濓紝鍙互鏌ョ湅涓涓嬨?/span>
鎴戜滑鍋氬畬鐩稿簲鐨勬搷浣滃悗錛岃鐭ラ亾閲婃斁錛屾鏃惰鐢ㄥ埌SHChangeNotifyFree銆傝繖涓敤璧鋒潵灝辯畝鍗曞緢澶氾紝濡?/span>SHChangeNotifyFree錛?/span>lpfcn錛夈?/span>
涓嬮潰緇欏ぇ瀹朵竴灝忔紺轟緥浠g爜錛屽涓?/span>
case WM_FILECHANGEINFO:
{
FILECHANGENOTIFY *lpfcn;
FILECHANGEINFO *lpfci;
lpfcn = (FILECHANGENOTIFY *)lParam;
if (NULL == lpfcn)
{
break;
}
// see if the pointer to the file change info structure
lpfci = &(lpfcn->fci);
if (NULL == lpfci)
{
break;
}
else
{
switch (lpfci->wEventId)
{
case SHCNE_RENAME:
{
//……
}
break;
}
}
SHChangeNotifyFree(lpfcn);
}
break;
3銆佸浣曞仠姝㈡枃浠剁洃鎺?/span>
鍋滄鏂囦歡鐩戞帶姣旇緝綆鍗曪紝鍙浣胯紿楀彛涓嶆帴鏀?/span>WM_FILECHANGEINFO娑堟伅鍗沖彲銆備嬌鐢?/span>SHChangeNotifyDeregister(hWnd)鍗沖彲銆?/span>
浠ヤ笂鏄垜浠婂ぉ瀛︿範鐨勪竴浜涙葷粨錛屾澶栭渶瑕佹敞鎰忕殑涓涓皬鍦版柟錛屽湪mobile涓婏紝鎶婁竴涓枃浠朵粠涓涓枃浠跺す鎷峰埌鍙︿竴涓枃浠跺す錛屾鏃跺搷搴旂殑浜嬩歡鏄?/span>SHCNE_CREATE錛屼簩浠庣數(shù)鑴戜笂鎷瘋礉涓涓枃浠跺埌mobile涓婏紝鍝嶅簲鐨勬秷鎭負SHCNE_RENAME銆傛垜娉ㄦ剰鍒頒粠鐢?shù)鑴戜笂鎷疯礉鐨勮瘽锛?/span>mobile浼氬厛鐢熸垚涓涓?/span>Temp鏂囦歡澶瑰唴鐢熸垚涓涓復(fù)鏃舵枃浠訛紝鐒跺悗鍐嶅湪鎴戜滑鎸囧畾鐨勬枃浠跺す鍐呯敓鎴愪竴涓枃浠躲傝繖涓満鍒舵垜榪樹笉鏄緢娓呮涓轟粈涔堛?/span>
error C3861: 'CeMountDBVolEx': identifier not found
error C3861: 'CeMountDBVolEx': identifier not found
error C3861: 'CeCreateDatabaseWithProp
error C3861: 'CeCreateSession': identifier not found
error C3861: 'CeOpenDatabaseInSession': identifier not found
鎴戝湪.cpp鏂囦歡鐨勫紑澶村姞鍏ヤ簡
#define EDB
#include <windows.h>
#include <windbase.h>
浣嗘槸閿欒榪樹緷鐒跺瓨鍦?/p>
浠庣綉涓婃悳绱簡涓浜涙柟娉?/p>
鍦ㄥ崥鏂囥妋obile鏁版嵁搴撻亣鍒扮殑闂銆?/font>
http://blog.sina.com.cn/s/blog_4c5ad0740100cvxg.html
瀹冮噷闈㈠緩璁嬌鐢?/p>
extern "C"
{
}
浣嗘槸浣跨敤鍚庯紝闂鍙樻垚浜唋nk鐨勯敊璇?/p>
error LNK2019: unresolved external symbol
鏈変漢鍦ㄨ鍧涢噷寤鴻
#include Windbase_edb.h
涔熸槸鍚屾牱鐨勯棶棰?/p>
鏈鍚庯紝鎴戦棶浜嗕竴涓嬫垜鐨勫悓浜?/p>
浠栧緩璁垜鍦?/p>
stdafx.h 澶存枃浠朵腑娣誨姞
#define EDB
#include <windows.h>
#include <windbase.h>
榪欐牱鐨勭‘瑙e喅浜嗛棶棰樸?/p>
榪涚▼闂?a onclick="javascript:tagshow(event, '%E9%80%9A%E4%BF%A1');" href="javascript:;" target=_self>閫氫俊鏈変互涓嬫柟娉?br>Using named objects
Waiting for multiple objects
Waiting in a message loop
Using mutex objects
Using semaphore objects
Using event objects
Using critical section objects
Using timer queues
Using waitable timer objects
榪涚▼闂寸殑閫氳瀹炵幇錛圛PC錛夌殑11縐嶆柟娉?/span>
榪涚▼閫氬父琚畾涔変負涓涓鍦ㄨ繍琛岀殑紼嬪簭鐨勫疄渚嬶紝瀹冪敱涓や釜閮ㄥ垎緇勬垚錛?br>涓涓槸鎿嶄綔緋葷粺鐢ㄦ潵綆$悊榪涚▼鐨?a onclick="javascript:tagshow(event, '%E5%86%85%E6%A0%B8');" href="javascript:;" target=_self>鍐呮牳瀵硅薄銆傚唴鏍稿璞′篃鏄郴緇熺敤鏉ュ瓨鏀懼叧浜庤繘紼嬬殑緇熻淇℃伅鐨勫湴鏂?br> 鍙︿竴涓槸鍦板潃絀洪棿錛屽畠鍖呭惈鎵鏈夌殑鍙墽琛屾ā鍧楁垨DLL妯″潡鐨勪唬鐮佸拰鏁版嵁銆傚畠榪樺寘鍚姩鎬佸垎閰嶇殑絀洪棿銆傚綰跨▼鍫嗘爤鍜屽爢鍒嗛厤絀洪棿銆傛瘡涓繘紼嬭璧嬩簣瀹冭嚜宸辯殑铏氭嫙鍦板潃絀洪棿錛屽綋榪涚▼涓殑涓涓嚎紼嬫鍦ㄨ繍琛屾椂錛岃綰跨▼鍙互璁塊棶鍙睘浜庡畠鐨勮繘紼嬬殑鍐呭瓨銆傚睘浜庡叾瀹冭繘紼嬬殑鍐呭瓨鍒欐槸闅愯棌鐨勶紝騫朵笉鑳借姝e湪榪愯鐨勭嚎紼嬭闂?br> 涓轟簡鑳藉湪涓や釜榪涚▼涔嬮棿榪涜閫氳錛岀敱浠ヤ笅鍑犵鏂規(guī)硶鍙緵鍙傝冿細
鍦?6浣嶆椂浠e父浣跨敤鐨勬柟寮忥紝CWnd涓彁渚涙敮鎸?br>1銆傜獥鍙f秷鎭?鏍囧噯鐨刉indows娑堟伅浠ュ強涓撶敤鐨刉M_COPYDATA娑堟伅 SENDMESSAGE()鎺ユ敹绔繀欏繪湁涓涓獥鍙?/p>
2銆備嬌鐢ㄥ叡浜唴瀛樻柟寮忥紙Shared Memory)
a.璁懼畾涓鍧楀叡浜唴瀛樺尯鍩?nbsp;
HANDLE CreateFileMapping(HANDLE,LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCSTR)
浜х敓涓涓猣ile-mapping鏍稿績瀵硅薄
LPVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAcess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
DWORD dwNumberOfBytesToMap
);
寰楀埌鍏變韓鍐呭瓨鐨?a onclick="javascript:tagshow(event, '%E6%8C%87%E9%92%88');" href="javascript:;" target=_self>鎸囬拡
b.鎵懼嚭鍏變韓鍐呭瓨
鍐沖畾榪欏潡鍐呭瓨瑕佷互鐐瑰鐐癸紙peer to peer)鐨勫艦寮忓憟鐜?br>姣忎釜榪涚▼閮藉繀欏繪湁鐩稿悓鐨勮兘鍔涳紝浜х敓鍏變韓鍐呭瓨騫跺皢瀹冨垵濮嬪寲銆傛瘡涓繘紼?br>閮藉簲璇ヨ皟鐢–reateFileMapping(),鐒跺悗璋冪敤GetLastError().濡傛灉浼犲洖鐨勯敊璇唬鐮佹槸ERROR_ALREADY_EXISTS,閭d箞榪涚▼灝卞彲浠ュ亣璁捐繖涓鍏變韓鍐呭瓨鍖? 鍩熷凡緇忚鍒殑榪涚▼鎵撳紑騫跺垵濮嬪寲浜嗭紝鍚﹀垯璇ヨ繘紼嬪氨鍙互鍚堢悊鐨勮涓鴻嚜宸?鎺掑湪絎竴浣嶏紝騫舵帴涓嬫潵灝嗗叡浜唴瀛樺垵濮嬪寲銆傝繕鏄浣跨敤client/server鏋舵瀯涓彧鏈塻erver榪涚▼鎵嶅簲璇ヤ駭鐢熷茍鍒濆鍖栧叡浜唴瀛樸傛墍鏈夌殑榪涚▼閮藉簲璇ヤ嬌鐢?br>HANDLE OpenFileMapping(DWORD dwDesiredAccess,
BOOL bInheritHandle,
LPCTSTR lpName);
鍐嶈皟鐢∕apViewOfFile(),鍙栧緱鍏變韓鍐呭瓨鐨勬寚閽?br> c.鍚屾澶勭悊(Mutex)
d.娓呯悊(Cleaning up) BOOL UnmapViewOfFile(LPCVOID lpBaseAddress);
CloseHandle()
3銆傚姩鎬佹暟鎹氦鎹紙DDE錛夐氳繃緇存姢鍏ㄥ眬鍒嗛厤鍐呭瓨浣跨殑搴旂敤紼嬪簭闂翠紶閫掓垚涓哄彲鑳?br> 鍏舵柟寮忔槸鍐嶄竴鍧楀叏灞鍐呭瓨涓墜宸ユ斁緗ぇ閲忕殑鏁版嵁錛岀劧鍚庝嬌鐢ㄧ獥鍙f秷鎭紶閫掑唴瀛?nbsp; 鎸囬拡.榪欐槸16浣峎IN鏃朵唬浣跨敤鐨勬柟寮忥紝鍥犱負鍦╓IN32涓嬪凡緇忔病鏈夊叏灞鍜屽眬閮ㄥ唴瀛?nbsp; 浜嗭紝鐜板湪鐨勫唴瀛樺彧鏈変竴縐嶅氨鏄櫄瀛樸?nbsp;
4銆傛秷鎭閬?Message Pipe)
鐢ㄤ簬璁劇疆搴旂敤紼嬪簭闂寸殑涓鏉℃案涔呴氳閫氶亾錛岄氳繃璇ラ氶亾鍙互璞¤嚜宸辯殑搴旂敤紼嬪簭
璁塊棶涓涓鉤闈?a onclick="javascript:tagshow(event, '%E6%96%87%E4%BB%B6');" href="javascript:;" target=_self>鏂囦歡涓鏍瘋鍐欐暟鎹?br> 鍚嶇閬?Anonymous Pipes)
鍗曞悜嫻佸姩錛屽茍涓斿彧鑳藉鍦ㄥ悓涓鐢?shù)鑴戜笂鐨勫悇涓獦q涚▼涔嬮棿嫻佸姩銆?br> 鍛藉悕綆¢亾(Named Pipes)
鍙屽悜錛岃法緗戠粶錛屼換浣曡繘紼嬮兘鍙互杞繪槗鐨勬姄浣忥紝鏀捐繘綆¢亾鐨勬暟鎹湁鍥哄畾鐨勬牸寮忥紝鑰屼嬌鐢≧eadFile()鍙兘璇誨彇璇ュぇ灝忕殑鍊嶆暟銆傚彲浠ヨ浣跨敤浜嶪/O Completion Ports
5閭歡妲?Mailslots)
騫挎挱寮忛氫俊,鍦?2緋葷粺涓彁渚涚殑鏂版柟娉曪紝鍙互鍦ㄤ笉鍚屼富鏈洪棿浜ゆ崲鏁版嵁錛屽湪 WIN9X涓嬪彧鏀寔閭歡妲藉鎴?/p>
6Windows濂楁帴瀛?Windows Socket)
瀹冨叿澶囨秷鎭閬撴墍鏈夌殑鍔熻兘錛屼絾閬靛畧涓濂楅氫俊鏍囧噯浣跨殑涓嶅悓鎿嶄綔緋葷粺涔嬩笂鐨勫簲 鐢ㄧ▼搴忎箣闂村彲浠ヤ簰鐩擱氫俊銆?/p>
7Internet閫氫俊 瀹冭搴旂敤紼嬪簭浠嶪nternet鍦板潃涓婅澆鎴?a onclick="javascript:tagshow(event, '%E4%B8%8B%E8%BD%BD');" href="javascript:;" target=_self>涓嬭澆鏂囦歡
8銆俁PC錛氳繙紼嬭繃紼嬭皟鐢紝寰堝皯浣跨敤錛屽洜鍏朵笌UNIX鐨凴PC涓嶅吋瀹廣?/p>
9銆備覆琛?騫惰閫氫俊(Serial/Parallel Communication)
瀹冨厑璁稿簲鐢ㄧ▼搴忛氳繃涓茶鎴栧茍琛岀鍙d笌鍏朵粬鐨勫簲鐢ㄧ▼搴忛氫俊
10銆侰OM/DCOM
閫氳繃COM緋葷粺鐨勪唬鐞嗗瓨鏍規(guī)柟寮忚繘琛岃繘紼嬮棿鏁版嵁浜ゆ崲錛屼絾鍙兘澶熻〃鐜板湪瀵規(guī)帴鍙?nbsp; 鍑芥暟鐨勮皟鐢ㄦ椂浼犻佹暟鎹紝閫氳繃DCOM鍙互鍦ㄤ笉鍚屼富鏈洪棿浼犻佹暟鎹?/p>
std::vector<ITEMDATA> vcData;
GetValue(vcData);
B 涓殑浠g爜涓?br>
void GetValue(std::vector<ITEMDATA> &vcData)

{
……
ITEMDATA item;
……
vcData.push_back(item);
……
}榪欐槸鏈榪戠湅鐨勪竴鐗囩煭鏂囩殑title錛屽綋鏃跺氨寰堝ソ濂囥?br>緇忓父鏌ラ槄MSDN鐨勭▼搴忓憳閮戒細鏈夎繖涓嵃璞★紝寰蔣code sample涓父瑙佺殑鏄痁eroMemory錛岃屼笉鏄璦鎻愪緵鐨?#8220;{0}”娓呴浂鍔熻兘錛堜笉榪囷紝鎴戜竴鐩翠篃娌℃湁闂釜why錛夈俢++璇硶涓0鏄庡鏁扮粍鎴栫函緇撴瀯錛坰truct錛夛紝鍙互浣跨敤渚嬪SPerson sTest = {0}; 鏉ュ皢鎵鏈夋垚鍛樼疆0.
閭g瘒鏂囩珷鐨勮В閲婃槸錛孧icrosoft浣跨敤ZeroMemory浼氭洿clear錛屽洜涓?#8220;= {0}” 榪欐牱鐨勮娉曟湁浜涚敓鍍伙紝涓嶆槸鎵鏈変漢閮藉彲浠ヤ竴涓嬪瓙鏄庣櫧銆?/p>
瀹為檯涓婏紝涓よ呰繕鏄湁涓浜涘尯鍒?br>鍏朵竴錛孼eroMemory浼氬皢緇撴瀯鎵鏈夊瓧鑺傜疆0錛岃?{0}鍙細灝嗘垚鍛樼疆0錛屽叾涓璸adding瀛楄妭涓嶅彉銆?/p>
鍏朵簩錛屼絾涓涓猻truct鏈夋瀯閫犲嚱鏁版垨铏氬嚱鏁版椂錛孼eroMemory鍙互錛岃?{0}浼氱紪璇戜笉榪囥傛樉鐒訛紝鍚庤呰搗鍒頒簡涓浜涗繚鎶や綔鐢紝鍥犱負瀵逛竴涓湁铏氬嚱鏁扮殑瀵硅薄浣跨敤ZeroMemory鏃訛紝浼氬皢鍏惰櫄鍑芥暟鐨勬寚閽堢疆0錛岃繖鏄潪甯稿嵄闄╃殑錛屽洜涓鴻皟鐢ㄨ櫄鍑芥暟鏃訛紝紼嬪簭鏄劇劧浼歝rash銆傚弬鐪嬪涓嬩唬鐮侊細
struct SPerson

{
//SPerson(){ }
char c;
float s;
};
class CTestVirtual

{
public:
CTestVirtual()
{
}
virtual int Draw()
{
return 10;
}
int a;
};
void Test() 

{
char sztmp[20];
ZeroMemory(sztmp, sizeof(sztmp));

SPerson sTest =
{0};
int i = sizeof(SPerson);
//CTestVirtual otv = {0}; //Compire error
CTestVirtual tv;
ZeroMemory(&tv, sizeof(tv));
tv.Draw(); //As it is an object, don't use the virtual function pointer, so don't crash.
CTestVirtual *pTv = &tv;
pTv->Draw(); //Crash!!!
}