❶ 製作exe程序需要用什麼軟體
有人把java和javascript都分不清了,呵呵。在大學時學過一點,全忘了,暈。
將Java應用程序本地編譯為EXE的幾種方法
1. 從www.towerj.com獲得一個TowerJ編譯器,該編譯器可以將你的CLASS文件編譯成EXE文件。
2. 利用微軟的SDK-Java 4.0所提供的jexegen.exe創建EXE文件,這個軟體可以從微軟的網站免費下載,地址如下:
http://www.microsoft.com/java/download/dl_sdk40.htm
jexegen的語法如下:
jexegen /OUT:exe_file_name
/MAIN:main_class_name main_class_file_name.class
[and other classes]
3. Visual Cafe提供了一個能夠創建EXE文件的本地編譯器。你需要安裝該光碟上提供的EXE組件。
4. 使用InstallAnywhere創建安裝盤。
5. 使用IBM AlphaWorks提供的一個高性能Java編譯器,該編譯器可以從下面的地址獲得:
http://www.alphaworks.ibm.com/tech/hpc
6. JET是一個優秀的Java語言本地編譯器。該編譯器可以從這個網站獲得一個測試版本:
http://www.excelsior-usa.com/jet.html
7. Instantiations公司的JOVE
http://www.instantiations.com/jove/...ejovesystem.htm
JOVE公司合並了以前的SuperCede,一個優秀的本地編譯器,現在SuperCede已經不復存在了。
8. JToEXE
Bravo Zulu Consulting, Inc開發的一款本地編譯器,本來可以從該公司的網頁上免費下載的,不過目前在該公司的主頁上找不到了。
公司主頁: http://www.bravozulu.com/
下面這個FTP上曾經有過這個軟體,不知道現在是不是還在:
ftp://race.dlut.e.cn/pub/java/tools/jet
9.jbuilder
這個是Borland不公開的使用技巧,能夠通過JBuilder來製作exe文件來啟動Java文件。
JBuilder並不支持本地編譯機制。但是有一個隱藏的技巧可以讓你從可執行文件來啟動Java程序,可以出現或者不出現console窗口。想做到這些,需要JBuilder的bin目錄下的這些文件:
JBuilder.exe
JBuilderW.exe (可選)
JBuilder.config
jdk.config
JavaLauncher.dll
「JBuilder.exe」是一個通用的可執行外殼文件,用以啟動Java程序,」JBuilderW.exe「好像是javaw.exe一樣,它把」JBuilder.exe」包裝起來,但是運行時候不顯示那個console的窗口。使用這些文件的關鍵是文件名。「JBuilder.exe」查找一個文件叫」JBuilder.config」的配置文件,裡麵包含了運行Java程序的必須信息。同樣的」JBuilderW.exe」查找」JBuilder.exe」來啟動不帶Console窗口的Java程序。如果把JBuilder.exe重命名為」foo
.exe」,那」foo.exe」將去尋找」foo.config」配置文件,同樣」JBuilderW.exe」被重命名為」fooW.exe」,它會去尋找」foo.exe」文件。
說到這里,聰明的讀者應該猜到怎樣利用JBuilder.exe來啟動應用程序了。只要把JBuilder.exe,JBuilerW.exe,JBuilder.config改名成相應的文件名,在JBuilder.config裡面指定主類和類路徑,就能夠通過執行JBuilder.exe(或者被改名後的exe文件)來啟動Java應用程序了。下面是用本機為例。
Borland JBuilder 5被安裝在E:\jbuilder5\目錄下,在E:\jbuilder5\bin\下建立一個temp目錄,然後把JBuilder.exe,JBuilder.config,JavaLauncher.dll,jdk.config四個文件拷貝到E:\jbuilder5\bin\temp\目錄下,然後在這個目錄下建立一個hello目錄,在這個目錄下生成一個hello.java文件,即E:\jbuilder5\bin\temp\hello\hello.java文件,
file://hello.java/
package hello;
public class hello{
public static void main(String s[]){
System.out.println("Hello, Exe file!");
}
}
編譯成class文件,然後打開Jbuilder.config文件,作相應的修改:
在JBuilder.config裡面找到下面兩行
# Start JBuilder using the its main class
mainclass com.borland.jbuilder.JBuilder
修改為
# Start JBuilder using the its main class
mainclass hello.hello
addpath E:/jbuilder5/bin/temp/
addpath命令是把目錄加入類路徑中,這個命令和其它config裡面可以識別的命令可以在JBuilder/bin目錄下的config_readme.txt裡面找到詳細說明。
然後將jdk.config裡面的javapath修改成相對的路徑,例如原來是
javapath ../jdk1.3/bin/java
修改成
javapath ../../jdk1.3/bin/java
最後
將JBuilder.exe,JBuilder.config修改成所需要的文件名,例如foo.exe和foo.config文件。
現在執行foo.exe文件
至此,通過修改JBuilder來使用exe文件啟動自己的Java應用程序已經完成了。
但是好玩的地方並不在這個地方,下面的小技巧可能更有趣,將Jar文件打包進入exe文件!
假設利用上面的文件,生成hello.jar包,
jar cvf hello.jar hello\*.class
然後將jar包附加到JBuilder.exe後面去,
/b ..\JBuilder.exe+hello.jar foo.exe
在foo.config(JBuilder.config)文件裡面把前面加入的類路徑去掉,並加入下面的路徑:
addpath E:/jbuilder5/bin/temp/foo.exe
然後執行,foo.exe
看到了么?一個含jar包的exe文件被執行了!
這個過程的大致原理是:exe文件的重要信息都在文件頭部,所以把亂七八糟的東西放exe文件尾部是不要緊的;而jar/zip文件的重要信息是在文件尾部的,這樣它們兩不相干,能夠容易的被執行。
請注意:讀者如果使用這個功能,得自己承擔可能帶來的風險,因為Borland對這個功能不提供官方的支持!
還可以去看看 http://www-900.ibm.com/developerWor...ive/index.shtml這是一篇分析的文章,但它提供了很多有用的資料。
❷ 什麼是「C加加」啊
C加加就是c++。
C++,C語言這個詞在中國大陸的程序員圈子中通常被讀做「C加加」,而西方的程序員通常讀做「C plus plus」,它是一種使用非常廣泛的計算機編程語言。
C++是一種靜態數據類型檢查的,支持多重編程範式的通用程序設計語言。它支持過程化程序設計、數據抽象、面向對象程序設計、製作圖標等等泛型程序設計等多種程序設計風格。
C++是C語言的繼承,它既可以進行C語言的過程化程序設計,又可以進行以抽象數據類型為特點的基於對象的程序設計,還可以進行以繼承和多態為特點的面向對象的程序設計。C++擅長面向對象程序設計的同時,還可以進行基於過程的程序設計,因而C++就適應的問題規模而論,大小由之。
C++不僅擁有計算機高效運行的實用性特徵,同時還致力於提高大規模程序的編程質量與程序設計語言的問題描述能力。
(2)hpc編譯器論文擴展閱讀:
C++的語言特點:
1、支持數據封裝和數據隱藏
在C++中,類是支持數據封裝的工具,對象則是數據封裝的實現。C++通過建立用戶定義類支持數據封裝和數據隱藏。
在面向對象的程序設計中,將數據和對該數據進行合法操作的函數封裝在一起作為一個類的定義。對象被說明為具有一個給定類的變數。每個給定類的對象包含這個類所規定的若干私有成員、公有成員及保護成員。
完好定義的類一旦建立,就可看成完全封裝的實體,可以作為一個整體單元使用。類的實際內部工作隱藏起來,使用完好定義的類的用戶不需要知道類是如何工作的,只要知道如何使用它即可。
2、支持繼承和重用
在C++現有類的基礎上可以聲明新類型,這就是繼承和重用的思想。通過繼承和重用可以更有效地組織程序結構,明確類間關系,並且充分利用已有的類來完成更復雜、深入的開發。新定義的類為子類,成為派生類。它可以從父類那裡繼承所有非私有的屬性和方法,作為自己的成員。
3、支持多態性
採用多態性為每個類指定表現行為。多態性形成由父類和它們的子類組成的一個樹型結構。在這個樹中的每個子類可以接收一個或多個具有相同名字的消息。當一個消息被這個樹中一個類的一個對象接收時,這個對象動態地決定給予子類對象的消息的某種用法。多態性的這一特性允許使用高級抽象。
繼承性和多態性的組合,可以輕易地生成一系列雖然類似但獨一無二的對象。由於繼承性,這些對象共享許多相似的特徵。由於多態性,一個對象可有獨特的表現方式,而另一個對象有另一種表現方式。
❸ HMAP鏄浠涔
蹇閫熷叆闂
絎涓絝 hmap寮鍙戠殑鍩烘湰鐜澧冨拰宸ュ叿
1.1 鍩烘湰鐜澧
鐢變簬宓屽叆寮忓紑鍙戠殑鐗規畩鎬,浣垮緱瀹冪殑寮鍙戜笉璞″紑鍙戝叾瀹冨簲鐢ㄨ蔣浠朵竴鏍峰叿鏈夌浉鍚岀殑寮鍙戣繍琛岀幆澧,鍥犺屽祵鍏ュ紡杞浠剁殑寮鍙戜笌榪愯岀殑鐜澧冧笉涓瀹氫繚鎸佷竴鑷存.
1.1.1 紜浠剁幆澧:
Pentium綰у勭悊鍣ㄧ殑妗岄潰璁$畻鏈,寤鴻浣跨敤Pentium 150-MHz鎴栨洿楂樻。嬈$殑澶勭悊鍣.
絎﹀悎妗岄潰璁$畻鏈鴻勮寖瑕佹眰鐨凜D-ROM椹卞姩鍣.
VGA鎴栧叿澶囨洿楂樿В鏋愬害鐨勬樉紺哄櫒.寤鴻浣跨敤Super VGA鏄劇ず鍣.
榧犳爣鎴栧叾瀹冨吋瀹規寚鐐硅懼.
瓚沖熺殑紜鐩樼┖闂.
鏈灝忓寲瀹夎呮柟寮(鍖呮嫭eMbedded Visual C++鍜屼竴涓猄DK)鎵闇紓佺洏絀洪棿:360 MB.
瀹屽叏瀹夎呮柟寮(鍖呮嫭eMbedded Visual Basic,eMbedded Visual C++鍜屼笁涓猄DK)鎵闇紓佺洏絀洪棿:720 MB.
6) 濡傛灉鎿嶄綔緋葷粺涓篧indows 98 Second Edition,搴旇嚦灝戦厤澶24 MB鍐呭瓨(寤鴻浣跨敤48 MB);濡傛灉鎿嶄綔緋葷粺涓篧indows NT Workstation 4.0鎴朩indows 2000,鍒欏簲鑷沖皯閰嶅32MB鍐呭瓨(寤鴻浣跨敤48 MB).
1.1.2 杞浠剁幆澧:
1)Microsoft Windows 2000 Professional/閰嶅嘢P5鐨凪icrosoft Windows NT Workstation 4.0,Internet Explorer 5.01鍙奙DAC 2.1;鎴朚icrosoft Windows 98 Second Edition.
2)Microsoft eMbedded Visual Tools 3.0鍙婂叾浠ヤ笂鐗堟湰
3)hMap綾誨簱
1.2 寮鍙戝伐鍏
寮鍙戝伐鍏蜂富瑕佹槸涓浜涘祵鍏ュ紡鐨勫紑鍙戝伐鍏,涓昏佹槸Microsoft eMbedded Tools鍜學indows CE Tools涓や釜宸ュ叿,Microsoft eMbedded Tools鎻愪緵闆嗘垚寮鍙戠幆澧,Windows CE Tools鎻愪緵SDK鍙婂叾妯℃嫙鍣ㄧ幆澧.
1.2.1 寮鍙戝伐鍏峰畨瑁
Microsoft eMbedded Tools鐨勫畨瑁呯▼搴忎竴鑸涓嶹indows CE Tools鐨勫畨瑁呯▼搴忕粦鍦ㄤ竴璧,鍥犳や袱嬈懼伐鍏峰父甯告槸鍚屾椂瀹夎.涓嬮潰瀵筂icrosoft eMbedded Tools 3.0鍜學indows CE Tools 3.0瀹夎呯殑榪囩▼緇欏嚭涓涓綆瑕佹ラ:
鍚鍔∕icrosoft eMbedded Tools 3.0瀹夎呯▼搴,寮濮嬪畨瑁(瑙佸浘1.2.1.1)
鏍規嵁鐣岄潰鎻愮ず鎿嶄綔,褰撹緭鍏ヤ駭鍝両D鍚庝細寮瑰嚭瀹夎呯粍浠跺硅瘽妗(瑙佸浘1.2.1.2),鐒跺悗瀹夎呮枃浠跺皢鍒嗛変腑鐨勯夐」榪涜岀浉搴旂殑瀹夎,鍥犳や細鍑虹幇澶氭$殑瀹夎呭硅瘽妗.
鏍規嵁鐣岄潰鎻愮ず鎿嶄綔榛樿ゆ搷浣,鍑虹幇Microsoft eMbedded Tools鐨勫畨瑁呴夋嫨瀵硅瘽妗(灝嗗浘1.2.1.3)
鐒跺悗榪涜孧icrosoft eMbedded Tools騫舵樉紺鴻繘搴︽潯,瀹屾垚鍚庡紑濮媁indows CE Platform SDK (H/PC Pro) 瀹夎(瑙佸浘1.2.1.4)
閫夋嫨榛樿ゅ,H/PC Pro瀹夎呭畬鎴愬悗寮濮媁indows CE Platform SDK (Palm-size PC 1.2)鐨勫畨瑁(瑙佸浘1.2.1.5)
閫夋嫨榛樿ゅ,Palm-size PC 1.2瀹夎呭畬鎴愬悗寮濮媁indows CE Platform SDK (Pocket PC )鐨勫畨瑁(瑙佸浘1.2.1.6)
鍥1.2.1.1 鐐瑰嚮setup.exe寮濮嬪畨瑁,鐐瑰嚮Next鎸夐挳
鍥1.2.1.2 閫夋嫨闇瑕佸畨瑁呯殑緇勪歡閫夋嫨鍚庣偣鍑"Next"鎸夐挳
鍥1.2.1.3 閫夋嫨鐩稿簲瀹夎呯粍浠舵垨閫夋嫨"Select All",鐒跺悗鐐瑰嚮"Continue"鎸夐挳
鍥1.2.1.4 寮濮嬪畨瑁匴indows CE Platform SDK (H/PC Pro)
鍥1.2.1.5 鍑嗗囧紑濮嬪畨瑁匴indows CE Platform SDK (Palm-size PC 1.2)
鍥1.2.1.6 鍑嗗囧紑濮嬪畨瑁匴indows CE Platform SDK (Pocket PC)
1.2.2 Microsoft eMbedded Tools 3.0綆浠
Microsoft eMbedded Visual C++ 3.0鏄寰杞鍏鍙鎬負寮鍙慦indows CE搴旂敤紼嬪簭鑰屼笓闂ㄥ紑鍙戠殑涓涓闆嗘垚寮鍙戠幆澧.鍒╃敤榪欎釜闆嗘垚寮鍙戠幆澧,鍙浠ュ揩閫熷紑鍙戝嚭鍏蜂綋鐨勫簲鐢ㄧ▼搴.瀹冧笌Microsoft Visual C++涓鏍,閮芥槸鍔熻兘寮哄ぇ,搴旂敤鐏墊椿鐨勫紑鍙戝伐鍏,鐣岄潰涔熷緢鐩鎬技.涓嶸isual C++6.0涓嶅悓鐨勬槸Microsoft eMbedded Visual C++ 3.0涓嶆敮鎸佸氭枃妗g晫闈,涓嶆敮鎸侀潪32浣嶇殑鍑芥暟,鍏跺畠Windows涓嬮潰鐨 API鍑芥暟涓嶄竴瀹氭敮鎸,鍙鏀鎸乁nicode瀛楃,闄ゆや箣澶,瀹冪殑緙栬瘧鍜岃皟璇曢夐」涔熸槸涓嶄竴鏍風殑,瑙佸浘1.2.2.1.
鐢變簬鍦╓indows CE緋葷粺涓嬭繍琛岀殑紼嬪簭,涓嶄粎鍚岃懼囩被鍨嬫湁鍏,榪樺悓鍏蜂綋璁懼囩殑CPU綾誨瀷鏈夊叧,涓嶅悓鐨凜PU綾誨瀷,闇瑕佷笉鍚岀殑緙栬瘧浠g爜,鍥犳ゅ湪緙栫爜鍜岃皟璇曡繃紼嬩腑,瑕佹敞鎰忛夋嫨瀵瑰簲鐨勮懼囩被鍨,CPU綾誨瀷鍜岃繍琛岀幆澧.
1.2.3 Windows CE Tools 3.0綆浠
Windows CE Tools 3.0鐨勫畨瑁呬富瑕佹槸涓轟簡瀹夎呭祵鍏ュ紡寮鍙戠殑妯℃嫙鐜澧,璁╁紑鍙戠殑紼嬪簭濡傚悓鍦ㄧ浉搴旂殑宓屽叆寮忚懼囦笂涓鏍瘋皟璇曞拰榪愯.瀹冩槸涓涓寮鏀劇殑鍙鎵╁睍鐨32浣嶆搷浣滅郴緇.
Windows CE閽堝逛笉鍚岀殑windows搴旂敤騫沖彴鎻愪緵浜嗕笉鍚岀殑妯℃嫙鍣ㄧ郴緇,濡侾ocket PC emulation閽堝筆ocket PC ,CH/PC Pro emulation閽堝笴H/PC Pro,Palm-size PC 1.2 emulation閽堝筆alm-size PC 1.2,浠栦滑鐨勭晫闈㈠傚浘1.2.3.1,鍥1.2.3.2,鍥1.2.3.3鎵紺.
Windows CE緇欑▼搴忓紑鍙戣呮彁渚涗簡涓嶮icrosoft Win32API,ActiveX鎺у埗,淇℃伅闃熷垪鏈哄埗(MSMQ),瀵硅薄緇勪歡妯″瀷(COM),鍔ㄦ佹ā鏉垮簱(ATL),MFC搴撶浉浼肩殑鐜澧,鍚屾椂Windows CE榪樻彁渚涗簡涓縐嶅悓姝ヨ懼嘇ctiveSync,鏃犺哄逛覆琛屽紡閫氫俊,綰㈠栫嚎鎺ュ彛閫氫俊鎴栨槸緗戠粶綰胯礬鐨勯氫俊閮芥彁渚涘彴寮忚懼囦笌宓屽叆寮忚懼囪繛鎺ヤ笂鐨勬柟渚.
鍥1.2.3.1 Palm-size PC 1.2妯℃嫙鍣ㄧ晫闈 鍥1.2.3.1 Pocket PC妯℃嫙鍣ㄧ晫闈
鍥1.2.3.3 H/PC Pro妯℃嫙鍣ㄧ晫闈
1.2.4榪愯岀幆澧
瀵逛竴涓宓屽叆寮忓簲鐢ㄧ▼搴忔潵璁,鍏朵富瑕佺洰鐨勬槸涓轟簡搴旂敤,鍥犳ゅ彧鏈夊湪鏈緇堢殑榪愯岀幆澧冧笅,瀹冩墠鑳藉彂鎸ュ畠鐨勪竴浜涘姛鑳界殑浣滅敤.榪愯岀幆澧冨寘鎷浜嗚蔣浠剁幆澧冨拰紜浠剁幆澧.杞浠剁幆澧冨寘鎷浜哤indows CE(V3.0鎴栬呭叾鍗囩駭鐗堟湰,濡俉indows CE,紜浠剁幆澧冨侾alm Size PC,Handheld PC Pro(H/PC Pro),Pocket PC絳夋帉涓婄數鑴戝祵鍏ュ紡璁懼,鍐呭瓨闇奼備負16M鍙婂叾鐩稿尮閰嶇殑璁懼,濡侴PS緇堢絳.
絎浜岀珷 hmap鎺т歡鍙婂叾鐩稿叧璁劇疆
2.1 hmap鎺т歡綆浠
hMap(Hand Map)鏄鍩轟簬COM妯″瀷鐨勫祵鍏ュ紡GIS(Embedded GIS)寮鍙戝鉤鍙.闅忕潃縐誨姩淇℃伅璁懼(MID)鐨勫彂灞,GIS閫愭ヨ繘鍏ュ悗PC鍙戝睍闃舵,宓屽叆寮廏IS搴旂敤涓嶆柇澧炲姞,榪鍒囬渶瑕佸熀紜鎬у紑鍙戝鉤鍙,hMap鏄婊¤凍榪欎竴甯傚満闇奼傜殑鍩虹鎬ц蔣浠,鍒╃敤瀹冨彲浠ヤ負縐誨姩淇℃伅璁懼囧揩閫熷湴寮鍙戝拰鏋勫緩鍚勭岹IS/GPS/RS搴旂敤緋葷粺,濡侾DA涓婄殑GIS搴旂敤鍜屽崼鏄熷艱埅緇堢搴旂敤絳.
2.2 鏁版嵁鍑嗗
2.2.1 鏁版嵁鏍煎紡
hMap鍏鋒湁綺劇粌鐨勫唴鏍稿拰鏋侀珮鐨勬祻瑙堥熷害,楂樻晥鐨勬暟鎹鍘嬬緝姣,鏈夋晥瑙e喅浜嗗湴鍥炬暟鎹閲忎笌鍚勭嶇Щ鍔ㄤ俊鎮璁懼囧瓨鍌ㄧ┖闂存湁闄愮殑鐭涚浘,鍦≒DA涓婇噰鐢―S3鐨勫帇緙╂牸寮,鍗犵敤鐨勫瓨鍌ㄧ┖闂存洿灝,鏈夋晥鍦拌В鍐砅DA璁懼囨櫘閬嶇殑鐩稿瑰唴瀛樿緝灝忕殑闂棰,緋葷粺鑳藉熸洿鍔犵ǔ瀹氬揩閫熷湴榪愯.閲囬泦鍚庣殑鏁版嵁鍙杞鎴愮數鍔涜嚜鍔ㄥ寲綆$悊杞浠剁殑鏍囧噯鏍煎紡.Hmap鐨勬暟鎹鍖呭惈浜嗕袱縐嶇被鍨嬬殑鏁版嵁:涓嶅彲淇鏀規暟鎹鍜屽彲淇鏀規暟鎹,鍦╤Map涓灝嗕粬浠鍒嗗埆鏀懼叆鍚勮嚜鐨勬暟鎹灞備腑,鍚勮嚜綆$悊鐩稿簲綾誨瀷鐨勬暟鎹.
鏁版嵁綾誨瀷
灞傚唴鏁版嵁瀛樺偍鏍煎紡
鏄鍚﹀彲緙栬緫
鏄鍚﹁繘琛屽唴瀛樼紦鍐
涓嶅彲淇鏀
SP3
DB3
SPX
鍚
鍚
鍥懼艦鏂囦歡
灞炴ф枃浠
緔㈠紩鏂囦歡
鍙淇鏀
DS3
DB3
鏄
鏄
鍥懼艦鏂囦歡
灞炴ф枃浠
2.2.2 鏁版嵁鐩褰曡劇疆
灝嗘暟鎹鎷瘋礉鍒皐ce300\MS Pocket PC\emulation\palm300\My Documents鐩褰曚笅
2.3 閫氱敤瀛楃︿覆綾誨瀷鐜澧
Windows CE鏄鍩轟簬Unicode鐨勬搷浣滅郴緇,Windows NT鍜學indows 2000鍚屾椂鏀鎸乁nicode鍜孉NSI,鑰學indows 9x鍒欐槸鍩轟簬ANSI鐨勬搷浣滅郴緇.鑰冭檻鍒拌繖涓鎯呭喌,鍩轟簬hMap鐨勭▼搴忓紑鍙戞棦涓嶈兘浣跨敤LPWSTR涔嬬被鐨刄nicode瀛楃︿覆綾誨瀷,鍥犱負Windows 9x涓嶆敮鎸;涔熶笉鑳戒嬌鐢╟har, LPSTR涔嬬被鐨凙NSI瀛楃︿覆綾誨瀷,鍥犱負Windows CE涓嶆敮鎸.鎵浠ュ繀欏諱嬌鐢ㄩ氱敤瀛楃︿覆綾誨瀷.閫氱敤瀛楃︿覆綾誨瀷鏄鏍規嵁鐩鏍囨搷浣滅郴緇熺殑涓嶅悓,鍦ㄧ紪璇戠▼搴忔椂鏄犲皠涓烘g『鐨勫瓧絎﹂泦(ANSI鎴朥nicode)鐨勫畯.榪欎簺鍙浠ヤ嬌鐢ㄧ殑瀛楃︿覆綾誨瀷鍖呮嫭:TCHAR,TCHAR*,LPTSTR,LPCTSTR.褰撶劧,涔熷彲浠ヤ嬌鐢∕FC CString綾.紼嬪簭涓鐨勭‖浠g爜瀛楃︿覆蹇呴』鍖呭惈鍦═EXT瀹,L瀹忔垨鑰卂T瀹忎腑.涓庢ゅ悓鏃,榪橀渶瑕侀夌敤姝g『鐨凴TL(榪愯屾椂搴)瀛楃︿覆澶勭悊鍑芥暟,鑰屼笉鑳戒嬌鐢ˋNSI鎴栬匲nicode鐨勫嚱鏁 .
2.4 鎺т歡綾誨簱鏂囦歡璁劇疆鍜屽簱緙栬瘧鏂囦歡璁劇疆
2.4.1 鎺т歡綾誨簱鏂囦歡璁劇疆
褰撴柊寤轟簡涓涓鍩轟簬鎺т歡鐨勫伐紼嬪悗,瑕佷嬌鐢ㄦ帶浠秇map,蹇呴』灝嗘帶浠剁殑hmap.h,hmapwnd.h,hmap.cpp,hmapwnd.cpp鎷瘋礉鍒板垰寤虹珛鐨勫伐紼嬬洰褰曚笅,鐒跺悗灝嗗叾寮曞叆鍒板伐紼嬩腑,浠ヤ究鑳戒嬌鐢ㄦ帶浠剁殑鐩稿簲鍔熻兘,鍏蜂綋浣跨敤瑙佷笅闈㈢殑鍩轟簬hMap寮鍙戠ず鑼冨伐紼嬩竴絝.
2.4.2 搴撶紪璇戞枃浠惰劇疆
搴旂敤紼嬪簭鐨勭紪璇戝拰璋冭瘯榪愯岄渶瑕佽繛鎺ュ姩鎬佸簱,涓嶇℃槸Debug鐗堣繕鏄疪elease鐗堝潎闇瑕乵fcce300.dll,olece300.dll榪欎袱涓鍔ㄦ侀摼鎺ュ簱鏂囦歡(涓や釜鏂囦歡涓鐨"300"浠h〃瀵瑰簲鐨刉indowsCE鐨勭増鏈),鍥犳ら渶瑕佽劇疆榪欎袱涓鏂囦歡鐨勭洰褰,鏂規硶鏈夊備笅涓ょ:
1)灝唌fcce300.dll,olece300.dll涓や釜鏂囦歡鎷瘋礉鍒板備笅璺寰勭殑鐩褰曚笅:\Windows CE Tools\wce300\MS Pocket PC\emulation\ palm300\windows鍗沖畬鎴愯劇疆
2)鍦ㄥ緩絝嬩簡鏂扮殑宸ョ▼鍚,鐩存帴緙栬瘧宸ョ▼,榪欐椂Microsoft eMbedded Visual C++浼氳嚜鍔ㄦ悳.瀵誨苟榪炴帴涓や釜鏂囦歡,鍗沖畬鎴愯劇疆.
2.5 鎺т歡娉ㄥ唽
鎺т歡鍦ㄤ嬌鐢ㄤ箣鍓嶅繀欏昏緙栬瘧鐜澧冨簲鐢,鍥犳ら渶榪涜宧map鎺т歡鐨勬敞鍐,鏂瑰紡濡備笅:
灝唄map.ocx鎷瘋礉濡備笅璺寰勭殑鐩褰曚笅:\Windows CE Tools\wce300\MS Pocket PC\emulation\ palm300\windows
鍦ㄥ悓涓鐩褰曚笅鎼滅儲regsvrce.exe鏂囦歡,榪愯屽悗寮瑰嚭娉ㄥ唽紿楀彛(瑙佸浘2.3.1)
濉鍏hmap.ocx,Action閫夐」閫夋嫨"Register",杞鍚庣偣鍑"ok",濡傛灉娉ㄥ唽鎴愬姛鍒欏脊鍑烘敞鍐屾垚鍔熺獥鍙(瑙佸浘2.3.2),鍚﹀垯寮瑰嚭鍑洪敊紿楀彛(瑙佸浘2.3.3),媯鏌ュ悗閲嶆柊娉ㄥ唽鍗沖彲.
鍥2.3.1 娉ㄥ唽紿楀彛
鍥2.3.3 娉ㄥ唽澶辮觸
鍥2.3.2 鎺т歡鎴愬姛娉ㄥ唽
絎涓夌珷 鍩轟簬hMap鐨勭ず渚嬪伐紼嬪紑鍙
浜嗚В浜嗕互涓婁竴浜涘熀鏈鐨勫紑鍙戠幆澧冨拰鐩稿叧鐨勮劇疆涔嬪悗,鎴戜滑鏉ヨ繘琛屽叿浣撳伐紼嬬殑寮鍙.浠ユゆ潵瀵瑰熀浜巋Map鐨勫紑鍙戞湁涓涓鏇存竻鏅扮殑鐞嗚В.
3.1 瀹炵幇鍔熻兘
婕旂ず濡備綍鎵撳紑璁劇疆濂界殑鍦板浘,濡備綍榪涜屾斁澶,緙╁皬,婕娓,閫鍑虹瓑鍩烘湰鍔熻兘鎿嶄綔.
3.2 鍏蜂綋宸ョ▼鑼冧緥
棣栧厛,鎴戜滑灝嗗壋寤轟竴涓鏂扮殑宸ョ▼,鐒跺悗瀹炵幇鍩烘湰鐨勬搷浣滃姛鑳.
3.2.1 宸ョ▼鍒涘緩
鍚鍔╡Mbedded Visual C++ 3.0,閫夋嫨File/new,寮瑰嚭"new"瀵硅瘽妗(瑙佸浘3.2.1.1)閿鍏ュ伐紼嬪瓨鍌ㄨ礬寰"D:\work\"鍜屽伐紼嬪悕MapZoom,鐐瑰嚮"OK"鎸夐挳.
鍦╯tep1閫夋嫨鍗曟枃妗e拰璇璦璁劇疆,鐐瑰嚮"Next"鎸夐挳.(瑙佸浘3.2.1.2)
鍦╯tep2閫夋嫨涓夾ctiveX Controls,鐐瑰嚮"Next"鎸夐挳.(瑙佸浘3.2.1.3)
鐒跺悗鍦ㄤ綑涓嬬殑鍑犳ヤ腑閫夋嫨榛樿よ劇疆(瑙佸浘3.2.1.4鍀炲浘3.2.1.5),宸ョ▼鍒涘緩瀹屾瘯
鍦ㄥ壋寤哄ソ鐨勫伐紼嬩腑榪涜學CE configulation璁劇疆(璁劇疆瑙佸浘3.2.1.6),緙栬瘧宸ョ▼浣垮叾鑷鍔ㄩ摼鎺mfcce300.dll,olece300.dll鎴栬呮寜鐓х浜岀珷鐨2.5.2鑺傝繘琛岃劇疆.
6)寮曞叆hmap綾誨簱鏂囦歡鍒板伐紼嬩腑(瑙佸浘3.2.1.6鍀炲浘3.2.1.8), 灝唄map.h,hmapwnd.h,hmap.cpp,hmapwnd.cpp鎷瘋礉鍒板垰寤虹珛鐨勫伐紼嬬洰褰曚笅,鐒跺悗灝嗗叾寮曞叆鍒板伐紼嬩腑. 瑕佷嬌鐢ㄨ繖鍥涗釜鏂囦歡涓鐨勭浉搴斿姛鑳,蹇呴』鎸夌収3.2.3鑺備腑榪涜屽ご鏂囦歡鐨勫寘鍚.
鍒版,涓涓鍩轟簬hmap寮鍙戠殑鏂扮殑宸ョ▼寤虹珛鎴愬姛.鍙浠ユ寜鐓т笅涓鑺傜殑姝ラゅ疄鐜板熀鏈鍔熻兘鎿嶄綔.
鍥3.2.1.1 璁劇疆宸ョ▼璺寰勫拰宸ョ▼鍚
鍥3.2.1.2 閫夋嫨鍗曟枃妗
鍥3.2.1.3 婧愭枃浠跺拰MFC搴撹劇疆
鍥3.2.1.4 鍒涘緩鐨勭被
鍥3.2.1.5 鐐瑰嚮"OK"宸ョ▼鍒涘緩瀹屾瘯
鍥3.2.1.6 WCE configulation璁劇疆
鍥3.2.1.6 鎺т歡綾誨簱鏂囦歡綾誨簱鏂囦歡寮曞叆
鍥3.2.1.7 閫夋嫨瑕佸紩鍏ョ殑鏂囦歡
鍥3.2.1.8 鏂囦歡寮曞叆鍚庣殑Workspace鏍
3.2.2 鏁版嵁鍜屾帶浠惰劇疆
灝嗕緥瀛愭暟鎹鏁翠釜鏁版嵁鏂囦歡澶(wuhan)鍙婃帶浠秇map.ocx鎸夌収絎浜岀珷涓2.3鑺傚拰2.4鑺傜殑鏂瑰紡榪涜屾嫹璐濆拰娉ㄥ唽.
3.2.3 澶存枃浠舵坊鍔犱笌鎺т歡瀵硅薄鍒涘緩
1,鍦╯tdafx.h鍚庨儴涓娣誨姞
#include "hmap.h"
#include "hmapwnd.h"
2,鍦∕apZoomView.h涓娣誨姞
#include "hmapwnd.h"
3,鍦∕apZoomView.h涓澹版槑
// Implementation
_DHMap m_hMapCtl; //澹版槑瀵硅薄
UINT m_nCurTool;//瀹氫箟鍏夋爣
4,鍦≧esource.h涓瀹氫箟瀵硅薄IDC_hMapCtl鐨処D鍊:
IDC_hMapCtl 脳脳脳
("脳脳脳"浠h〃ID鍊,瀹冧緷鎹甊esource.h涓鐨処D鍒楄〃璁劇疆)
5,鍦∕apZoomView.cpp涓鍒涘緩鎺т歡瀵硅薄
int CMapZoomView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
//鍒涘緩hmap鎺т歡
CRect rectClient;
GetClientRect(&rectClient);
if (!m_hMapCtl.Create(_T("hello"), WS_VISIBLE,
rectClient, this, IDC_hMapCtl,NULL,FALSE,NULL))
{
DestroyWindow();
return FALSE;
}
return 0;
}
鍒涘緩鏂規硶鏄疌lass Wizard-Objects ID\CMPDAView-Messages\WM_CREATE-Member -functions\W OnCreate鐒跺悗緙栬緫浠g爜,娣誨姞濡備笅浠g爜:
//鍒涘緩hmap鎺т歡
CRect rectClient;
GetClientRect(&rectClient);
if (!m_hMapCtl.Create(_T("hello"), WS_VISIBLE,
rectClient, this, IDC_hMapCtl,NULL,FALSE,NULL))
{
DestroyWindow();
return FALSE;
}
榪欎簺浠g爜灝卞彲浠ヤ簡.
浠ヤ笂浣挎帶浠跺硅薄鐨勫畾涔夊拰鍒涘緩,涓嬮潰鍑犱釜灝忚妭灝嗗疄鐜板熀鏈鍔熻兘.
3.2.4 鍩烘湰鍔熻兘瀹炵幇
3.2.4.1 閫鍑哄姛鑳藉疄鐜
澧炲姞閫鍑鴻彍鍗曟寜閽,鐩存帴灝 閫鍑虹殑ID璁劇疆涓篒D_APP_EXIT灝卞彲浠ヤ簡.
鑿滃崟欏瑰炲姞姝ラゅ備笅:
鍦╓orkspace涓鎵撳紑ResourceView鏍囩劇獥鍙,閫夋嫨Menubar涓鐨処DR_MAINFRAME,騫墮紶鏍囧弻鍑誨畠.(瑙佸浘3.2.3.1.1)
鍦ㄥ彸杈圭殑宸ヤ綔鍖轟笅閮ㄦ湁鑿滃崟鍒涘緩鏍忔樉紺,鍙屽嚮絀虹櫧鑿滃崟欏,寮瑰嚭Menu Item Properties紿楀彛.(瑙佸浘3.2.3.1.2)
鍦℅eneral鏍囩鵑」濉鍏ID鍜孋aption欏.(ID:ID_APP_EXIT Caption :Exit)(瑙佸浘3.2.3.1.3)
鍏抽棴Menu Item Properties紿楀彛,Exit鑿滃崟欏瑰壋寤哄畬姣.(瑙佸浘3.2.3.1.4)
鍥3.2.3.1.1 Workspace涓璕esourceView鏍囩劇獥鍙
鍥3.2.3.1.2 Menu Item Properties紿楀彛
鍥3.2.3.1.3 濉鍐橧D鍜孋aption
鍥3.2.3.1.4 鍒涘緩鍙風殑Exit鑿滃崟欏
3.2.4.2 鎵撳紑鍦板浘鍔熻兘瀹炵幇
鑿滃崟鍒涘緩:鍒涘緩鏂規硶鍚3.2.4.1鑺備腑鑿滃崟欏瑰炲姞姝ラ,涓嶅悓涔嬪勫湪灝嗙涓夋ョ殑ID鍜孋aption欏,浠栦滑涓篒D:ID_ZOOM_OPENMAP Caption :Openmap
鏂規硶鍝嶅簲:Class Wizard-Objects ID\IDR_FILE_OPENMAP-Messages\CAMMND寮瑰嚭瀵硅瘽妗嗙偣OK(濡傛灉宸茬粡鏈変簡鍑芥暟鍒欏湪Member functions涓浼氭湁鍑芥暟鍏拌壊鏄劇ず鎴栬嚜宸遍夋嫨宸茬粡瀛樺湪鐨勫嚱鏁)鐒跺悗鍦∕apZoomView.cpp涓緙栬緫浠g爜:
//鎵撳紑鍦板浘
void CMapZoomView::OnZoomOpenmap()
{
CWaitCursor wait; //Do the lengthProcessing.
wait.Restore(); //Restore the Wait cursor.
IEmLayers layers(m_hMapCtl.GetLayers());
//lyrriver.SetGeoDataset(TEXT("\\My Documents\\xiamen\\姘寸郴.ds3"));
{
IEmMapLayer lyr;
lyr.CreateDispatch(TEXT("hMap.MapLayer"));
lyr.SetGeoDataset(TEXT("\\My Documents\\Wuhan\\鑳屾櫙.ds3"));
layers.Add(lyr);
}
{
IEmMapLayer lyr;
lyr.CreateDispatch(TEXT("hMap.MapLayer"));
lyr.SetGeoDataset(TEXT("\\My Documents\\Wuhan\\閬撹礬.ds3"));
layers.Add(lyr);
}
IEmRectangle emRect(m_hMapCtl.GetFullExtent());
emRect.ScaleRectangle(0.3);
m_hMapCtl.SetExtent(emRect);
}
3.2.4.3 鏀懼ぇ鍔熻兘瀹炵幇
鑿滃崟鍒涘緩:鍒涘緩鏂規硶鍚3.2.4.1鑺備腑鑿滃崟欏瑰炲姞姝ラ,涓嶅悓涔嬪勫湪灝嗙涓夋ョ殑ID鍜孋aption欏,浠栦滑涓篒D:ID_ZOOM_ZOOMIN Caption :Zoomin
鏂規硶鍝嶅簲:Class Wizard-Objects ID\IDR_FILE_ Zoomin-Messages\CAMMND寮瑰嚭瀵硅瘽妗嗙偣OK(濡傛灉宸茬粡鏈変簡鍑芥暟鍒欏湪Member functions涓浼氭湁鍑芥暟鍏拌壊鏄劇ず鎴栬嚜宸遍夋嫨宸茬粡瀛樺湪鐨勫嚱鏁)鐒跺悗鍦∕apZoomView.cpp涓緙栬緫浠g爜:
void CMapZoomView::OnZoomZoomin()
{
IAwryRectangle emRect(m_hMapCtl.GetAwryExtent());
emRect.ScaleReactangle(0.6);
m_hMapCtl.SetAwryExtent(emRect);
}
瀹冨疄璐ㄤ笂鏄灝咰MapZoomView::OnZoomOpenmap()涓鐨勬渶鍚庝笁琛屼唬鐮佹敼鍐.
3.2.4.4 緙╁皬鍔熻兘瀹炵幇
鑿滃崟鍒涘緩:鍒涘緩鏂規硶鍚3.2.4.1鑺備腑鑿滃崟欏瑰炲姞姝ラ,涓嶅悓涔嬪勫湪灝嗙涓夋ョ殑ID鍜孋aption欏,浠栦滑涓篒D:ID_ZOOM_ZOOM OUT Caption :Zoomout
鏂規硶鍝嶅簲:涓庢斁澶у姛鑳藉疄鐜扮浉浼煎湪MapZoomView.cpp涓緙栬緫浠g爜
void CMapZoomView::OnZoomZoomout()
{
IAwryRectangle emRect(m_hMapCtl.GetAwryExtent());
emRect.ScaleReactangle(1.5);
m_hMapCtl.SetAwryExtent(emRect);
}
3.2.4.5 婕娓稿姛鑳藉疄鐜
鑿滃崟鍒涘緩:鍒涘緩鏂規硶鍚3.2.4.1鑺備腑鑿滃崟欏瑰炲姞姝ラ,涓嶅悓涔嬪勫湪灝嗙涓夋ョ殑ID鍜孋aption欏,浠栦滑涓篒D:ID_ZOOM_ZOO MPAN Caption :Pan
鏂規硶鍑芥暟鍝嶅簲:闇瑕佸搷搴斾簨浠,瑕佹坊鍔犲搷搴斾簨浠剁殑鍑芥暟(瀵規瘡涓浜嬩歡鏉ヨ查兘闇瑕佸炲姞鍝嶅簲浜嬩歡鐨勫嚱鏁)
鍦∕apZoomView.h涓澧炲姞涓涓澹版槑
class CMapZoomView: public CView
{
鈥︹
protected:
鈥︹
//鍝嶅簲浜嬩歡
afx_msg void OnEmMouseDown(OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y);
DECLARE_EVENTSINK_MAP()
};
鍦–MapZoomView.cpp鍔犲叆濡備笅浠g爜
//鍝嶅簲浜嬩歡
#define DISPID_EMMOUSEDOWN 6L
BEGIN_EVENTSINK_MAP(CMapZoomView, CView)
ON_EVENT(CMapZoomView, IDC_hMapCtl, DISPID_EMMOUSEDOWN, OnEmMouseDown, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
END_EVENTSINK_MAP()
鍦–MapZoomView.cpp瀹氫箟OnZoomPan
void CMapZoomView::OnZoomPan()
{
m_nCurTool = 1;//緇欏嚭婕娓哥殑鐘舵
}
鍦–MapZoomView.cpp瀹氫箟OnEmMouseDown浜嬩歡
//鍝嶅簲浜嬩歡
void CMapZoomView::OnEmMouseDown(OLE_XPOS_PIXELS x,
OLE_YPOS_PIXELS y)
{
if(m_nCurTool == 1)
m_hMapCtl.Pan();
}
鍒版,浣犲凡緇忚兘澶熻繍鐢‥VC宸ュ叿榪涜岀畝鍗曠殑鍩轟簬hMap鐨勫祵鍏ュ紡寮鍙,瀹炵幇姣旇緝綆鍗曠殑鍔熻兘,褰撶劧闅忕潃瀛︿範鐨勬繁鍏,浣犲皢浼氬彂鐜癶Map寮哄ぇ鑰岀炲囩殑鍔熻兘.
絎鍥涚珷 鍦板浘鏌ヨ
閴翠簬鍦板浘鏌ヨ㈠姛鑳芥瘮絎涓夌珷鐨勫熀鏈鍔熻兘閲嶈佷笖澶嶆潅,鏈鍏ラ棬涓灝嗗湴鍥炬煡璇浣滀負鍗曠嫭涓絝犲瑰畠鍔犱互浠嬬粛.
鍦板浘鏌ヨ㈠寘鎷浜嗗浘褰㈠睘鎬у拰灞炴ф煡璇.
鍥懼艦鍒板睘鎬х殑鏌ヨ㈠寘鎷:鐐規煡璇,鐭╁艦鏌ヨ,澶氳竟褰㈡煡璇,鍦嗗艦鏌ヨ㈢瓑.
灞炴у埌鍥懼艦鐨勬煡璇涓昏佹槸妯$硦鏌ヨ.
4.1 灞炴ф煡璇
璋冪敤灞備腑鐨勬帴鍙SearchExpression,榪斿洖璁板綍闆
渚嬪:
IemLayer lyr;
lyr.SearchExpression(expression)
expression = "NAME = 綰㈡潐" 鎴
expression = "NAME like 綰㈡潐"
4.2 鍥懼艦鏌ヨ
鐩稿簲MouseDown浜嬩歡寰楀埌涓涓鐐,綰,闈,鐭╁艦,鍦(澶氳竟褰㈣〃紺)絳夊浘褰㈠硅薄
璋冪敤hmap涓鐨凾rackLine,TrackRectangle,TrackCircle,TrackPolygon
璋冪敤灞備腑鐨勬帴鍙SearchShape(姝ラ1涓寰楀埌鐨勫浘褰㈠硅薄),榪斿洖璁板綍闆
渚嬪:
//鐭╁艦鏌ユ壘
void RectQuery(_DHMap& hMapCtl, CMapSelection& ASelection)
{
IEmLayers layers(hMapCtl.GetLayers());
IEmRectangle emRect(hMapCtl.TrackRectangle());
if(emRect.m_lpDispatch == NULL)
{
hMapCtl.RefreshNoRedraw();
return;
}
HMAPSELECTED selectObject;
for(int i = 0; i < layers.GetCount();i++)
{
IEmMapLayer lyr(layers.Item(COleVariant((short)i)));
LPDISPATCH pIUnknown = lyr.SearchShape(emRect, TEXT(""));
if(pIUnknown == NULL)
continue;
IRecordset recs(pIUnknown);
long nNameFieldIndex = recs.GetFieldIndex(TEXT("NAME"));
if(nNameFieldIndex 0)
ASelection.Add(selectObject);
}
}
hMapCtl.RefreshNoRedraw();
}
絎浜旂珷 甯歌侀棶棰
5.1 闂:Microsoft eMbedded Visual Tools 3.0鍒板簳鏄浠涔
絳:eMbedded Visual Tools 3.0鏄涓濂椾緵宓屽叆寮忓紑鍙戝晢鍦∕icrosoft Windows CE鎿嶄綔緋葷粺涓婇潰鍚戞柊涓浠32浣嶈懼囩紪鍐欒蔣浠跺簲鐢ㄧ▼搴忕殑鐩稿叧宸ュ叿.瀹冩彁渚涗簡Microsoft eMbedded Visual C++ 3.0寮鍙戠郴緇熷畬鍏ㄧ増,Microsoft eMbedded Visual Basic 3.0寮鍙戠郴緇熷畬鍏ㄧ増,SDK,榪滅▼宸ュ叿鍙婄浉鍏蟲枃妗.
5.2 闂:eMbedded Visual Tools 3.0鍙闈㈠悜鍝浜涘井澶勭悊鍣ㄦ彁渚涙敮鎸
絳:eMbedded Visual C++鎻愪緵浜嗛拡瀵逛笅鍒楀井澶勭悊鍣ㄧ被鍨嬬殑緙栬瘧鍣:ARM720,SA1100,MIPS,MIPS16,MIPSFP,PPC,SH3,SH4,THUMB,x86,x86璁懼囨ā鎷熷櫒.
5.3 闂:eMbedded Visual Tools 3.0鏄鍚︽敮鎸佹ā鎷熸搷浣
絳:鏄鐨.涓嶈繃,鍙鏈夊湪榪愯屼簬Microsoft Windows 2000 Professional鎴朚icrosoft Windows NT Workstation 4.0涔嬩笅鏃舵墠浼氭敮鎸佹ā鎷熸搷浣.
5.4 闂:鏄鍚﹀彲鍦╓indows 98鎴朩indows 98 絎浜岀増涓嬭繍琛宔Mbedded Visual Tools 3.0
絳:eMbedded Visual Tools 3.0鏃犳硶瀹夎呭湪Windows 98涔嬩笅.鍦ㄨ繍琛屼簬Windows 98 Second Edition騫沖彴涓婃椂,灝嗘棤娉曟墽琛屾ā鎷熸搷浣;浣嗗叿澶囧叾瀹冨姛鑳.
5.5 闂:鍝閲屽彲浠ュ緱鍒癳MbeddedVisual Tools3.0
絳:璁塊棶Microsoft Developer's Toolbox site.
涓嬭澆緗戝潃:http://download.microsoft.com/do ... CE_EMBDVTOOLS30.exe涓嬭澆鍚,鎸夊畨瑁呭悜瀵兼寚紺哄畬鍏ㄥ畨瑁呭悗,鍙寰楀埌濡備笅杞浠: Microsoft eMbedded Visual tools(鍖呮嫭EVC3.0鍜孍VB3.0), SDK for pocket pc,SDK(HPC pro),SDK(Palm-size PC1.2),鍧囧寘鍚鏃㈠彲鍦ㄧ紪璇戞椂鍔犺澆榪愯,鍙堝彲鐩存帴鍦ㄦ岄潰涓婅繍琛岀殑妯℃嫙鐜澧.涓嬭澆杞浠跺寘鎬誨叡澶у皬304M.鎴栬呭備笅鍦板潃涔熷彲浠ュ緱鍒:
Microsoft eMbedded Visual Tools 3.0 涓嬭澆欏甸潰
http://www.microsoft.com/mobile/downloads/emvt30.asp
CDKey(寰杞鍏嶈垂鎻愪緵):TRT7H-KD36T-FRH8D-6QH8P-VFJHQ
Pocket PC 2002 Software Development Kit
http://download.microsoft.com/download/pocketpc/Install/2002/NT5XP/EN-US/PPC2002_SDK.exe
Pocket PC 2002 Emulator Images (涓鏂囩畝浣撴ā鎷熷櫒)
http://download.microsoft.com/download/pocketpc/Utility/2002.1/NT5XP/EN-US/ChSimp-NoRadio.exe
5.6 闂:涓轟粈涔堟敞鍐宧map.ocx鏃跺脊鍑烘敞鍐屼笉鎴愬姛鐨勫硅瘽妗
絳:璇風『瀹歨map.ocx鏄鍚﹀湪\Windows CE Tools\wce300\MS Pocket PC\emulation\ palm300\windows鍗蟲ā鎷熷櫒鐨剋indows鐩褰曚笅,鍚屾椂紜璁mfcce300.dll,olece300.dll鏄鍚﹀湪鍚屼竴鐩褰曚笅,鍚﹀垯璇鋒寜鐓2.4.2鑺傝繘琛屽簱緙栬瘧鏂囦歡璁劇疆.
5.7 闂:浠g爜姝g『浣嗙紪璇戜笉鎴愬姛鏀瑰備綍澶勭悊
絳:棣栧厛媯鏌ユ暟鎹璺寰勮劇疆鏄鍚︽g『(瑙2.2.2鑺),鎺т歡璺寰勬槸鍚︽g『騫剁『璁ゆ敞鍐屾垚鍔(瑙2.5鑺),鐒跺悗紜瀹歐CE Configulation宸ュ叿鏍忎腑璁懼囩被鍨,CPU綾誨瀷,妯℃嫙鍣ㄨ劇疆鏄鍚︽g『(瑙3.2.1鑺傜5姝),鏌ョ湅浠g爜鏄鍚︽g『.
闄勫綍:GPS鐨勪嬌鐢
涓,鍏ㄧ悆瀹氫綅緋葷粺綆浠
GPS鏄鐢辯編鍥藉浗闃查儴寮鍙戠殑鏄熷熀鏃犵嚎鐢靛艱埅緋葷粺.GPS姣忓ぉ24灝忔椂涓哄叏鐞冮檰,嫻,絀虹敤鎴峰叏澶╀警鎻愪緵涓夌淮浣嶇疆,閫熷害鍜屾椂闂.瀹冩瘮鍏跺畠鏃犵嚎鐢靛艱埅緋葷粺綺懼害鏇撮珮.闅忕潃鍏ㄧ悆瀹氫綅緋葷粺鐨勪笉鏂鏀硅繘,紜,杞浠剁殑涓嶆柇瀹屽杽,搴旂敤棰嗗煙姝e湪涓嶆柇鍦板紑鎷,鐩鍓嶅凡閬嶅強鍥芥皯緇忔祹鍚勭嶉儴闂,騫跺紑濮嬮愭ユ繁鍏ヤ漢浠鐨勬棩甯哥敓媧.
GPS緋葷粺鍖呮嫭涓夊ぇ閮ㄥ垎:絀洪棿孌碘擥PS鍗鏄熸槦搴;鎺у埗孌碘斿湴闈㈢洃鎺х郴緇;鐢ㄦ埛孌碘擥PS淇″彿鎺ユ敹鏈.
浜,絀洪棿孌
絀洪棿孌電敱鍒嗗竷鍦6涓杞ㄩ亾闈涓婄殑24棰楀崼鏄熺粍鎴.鍗鏄熻建閬撻珮搴20,200 km,鍊捐55搴,鍛ㄦ湡12灝忔椂.鍗鏄熺殑杞ㄩ亾鍒嗗竷淇濊瘉鍦ㄤ笘鐣屽悇鍦頒換浣曟椂闂村彲瑙佸埌鑷沖皯6棰楀崼鏄.鍗鏄熻繛緇鍚戠敤鎴鋒彁渚涗綅緗鍜屾椂闂翠俊鎮.
涓,鍦伴潰鎺у埗孌
鎺у埗孌電敱涓涓涓繪帶絝,5涓鐩戞祴絝,涓変釜娉ㄥ叆絝欑粍鎴.涓繪帶絝欎綅浜嶤olorado.鐩戞祴絝欒窡韙瑙嗛噹鍐呮墍鏈塆PS鍗鏄,鏀墮泦鍗鏄熸祴璺濅俊鎮,騫舵妸鏀墮泦鐨勪俊鎮閫佸埌涓葷珯.涓葷珯璁$畻鍗鏄熺簿瀵嗚建閬,騫朵駭鐢熸瘡棰楀崼鏄熺殑瀵艱埅淇℃伅,閫氳繃娉ㄥ叆絝欎紶閫佸埌鍗鏄.
鍥,鐢ㄦ埛孌
鐢ㄦ埛孌電敱鎺ユ敹鏈,澶勭悊鍣ㄥ拰澶╃嚎緇勬垚.閫氳繃鎺ユ敹鍗鏄熷箍鎾淇℃伅璁$畻鍑虹敤鎴風殑浣嶇疆閫熷害鍜屾椂闂.
GPS鐨勬傚康鏄鍩轟簬鍗鏄熸祴璺.鐢ㄦ埛閫氳繃嫻嬮噺浠栦滑鍒板崼鏄熺殑璺濈繪潵璁$畻鑷宸辯殑浣嶇疆.鍗鏄熺殑浣嶇疆褰撳凡鐭ュ.姣忎釜GPS鍗鏄熷彂閫佷綅緗鍜屾椂闂翠俊鍙.鐢ㄦ埛鎺ユ敹鏈烘祴閲忎俊鍙峰埌杈炬帴鏀舵満鐨勬椂闂村歡榪,鐩稿綋浜庢祴閲忕敤鎴峰埌鍗鏄熺殑璺濈.鍚屾椂嫻嬮噺鍥涢楀崼鏄熷彲浠ヨВ鍑轟綅緗,閫熷害鍜屾椂闂.
浜,GPS鐨勫簲鐢
鍩轟簬涓撶綉闆嗙兢閫氫俊騫沖彴鐨勭Щ鍔ㄧ洰鏍囩洃鎺т笌綆$悊緋葷粺
鍩轟簬GSM鐭娑堟伅鍔熻兘鐨勭Щ鍔ㄧ洰鏍囩洃鎺т笌綆$悊緋葷粺
GPS鍦ㄥ浗姘戠粡嫻庡緩璁句腑鐨勫簲鐢
GPS鍦ㄥぇ鍦版帶鍒舵祴閲忎腑鐨勫簲鐢
GPS鍦ㄥ湴褰,鍦扮睄鍙婃埧鍦頒駭嫻嬮噺涓鐨勫簲鐢
GPS鍦ㄥ叕瀹,浜ら氱郴緇熶腑鐨勫簲鐢
GPS鍦ㄦ搗媧嬫祴緇樹腑鐨勫簲鐢
GPS鍦ㄨ埅嫻瘋埅絀哄艱埅涓鐨勫簲鐢
GPS鍦ㄥ啘涓,鏋椾笟,鏃呮父鍙婇噹澶栬冨療涓鐨勫簲鐢
鎵嬫寔GPS鍦ㄥ啗闃熼嗗煙鐨勫簲鐢
璁懼囩被鍨
CPU綾誨瀷
榪愯岀幆澧
鍥1.2.2.1 Microsoft eMbedded Visual C++ 3.0 宸ュ叿鏍(WCE Configuration)
❹ 軟體加密與解密的前言
隱蔽軟體(surreptitious software)是近十年來計算機安全研究領域新興的一個分支。在隱蔽軟體的研究過程中不僅需要借鑒計算機安全方面的技術,還會用到計算科學其他領域的大量技術,如密碼學、隱寫術、數字水印、軟體量度(software metric)、逆向工程以及編譯器優化等。我們使用這些技術來滿足在計算機程序中安全存儲秘密信息的需求,盡管這些需求的表現形式千差萬別、各不相同。本書中「秘密」一詞的意思比較廣,書中所介紹技術(代碼混淆、軟體水印和指紋、防篡改技術以及軟體「胎記」等)的使用目的是防止他人剽竊軟體中的智力成果。比如,軟體中使用指紋技術可以用來跟蹤軟體是否被盜版,代碼混淆技術能夠加大攻擊者逆向分析軟體的難度,而防篡改技術則可以使別人很難製作軟體的破解版,等等。
好了,現在我們來講講為什麼需要閱讀本書,誰使用隱蔽軟體以及本書將會涵蓋哪些內容。
為什麼閱讀本書
與傳統的安全研究不同,隱蔽軟體不關心如何使計算機免於計算機病毒入侵,它關心的是計算機病毒的作者是如何防止他人分析病毒的!同樣,我們也不關心軟體到底有沒有安全漏洞,我們關心的是如何隱蔽地在程序中加入一些只有在程序被篡改時才會執行的代碼。密碼學研究領域中,被加密數據的安全性依賴於加密密鑰的隱秘性,而我們現在研究的恰恰是如何隱藏密鑰。軟體工程中有大量的軟體量度技術,以確保程序結構良好,本書中將使用同樣的技術使程序復雜難讀。本書中描述的很多技術都是基於編譯器優化技術研究開發的演算法的,但是編譯優化的目的是使編譯器生成個頭盡量小、運行速度盡量快的程序,而使用本書中介紹的一些技術卻會使生成的程序個頭又大,執行起來又慢。最後,傳統的數字水印和隱寫術是想辦法把要隱藏的信息藏到圖像、音頻、視頻甚至純文本文件中,而隱蔽軟體則是把需要隱藏的信息藏到計算機代碼中。
那麼,為什麼要閱讀本書呢?為什麼要了解一種不能防止計算機被病毒或者蠕蟲攻擊的安全技術?為什麼要學習一種只會讓代碼體積變大而執行速度變慢的編譯優化技術?為什麼要把精力花在一種違反了密碼學基本前提(即密鑰是不可能被攻擊者獲得的)的密碼學分支上呢?
回答是,傳統的計算機安全和密碼學研究成果有時並不能解決實際工作中遇到的且亟待解決的安全問題。比如,在本書中將展示如何使用軟體水印技術防止軟體盜版。軟體水印是在程序中嵌入的唯一標識(類似信用卡的卡號或者版權聲明),通過這個標識,程序的某個副本就和你(程序的作者)或者客戶聯系在了一起。要是你發現市場上在賣自己軟體的盜版光碟,就可以通過在盜版軟體中提取的水印追查製作這個盜版軟體的母版 當初是哪個傢伙從你這里買走的。當給合作商提供新開發的游戲的測試版時,你也可以在測試版中加上數字水印。要是你感覺有人泄露了你的代碼,就能(從眾多的合作商中)找出肇事者,並把他送上法庭。
又比如,在程序的新版本中加上了某個新的演算法,你當然不希望競爭對手也得到這個演算法,並把它加到他們的軟體中。這時,你就可以去混淆程序,使之盡可能變得復雜難懂,使競爭對手逆向分析軟體時效率很低。而如果確實懷疑某人剽竊了你的代碼,本書也會教你如何使用軟體「胎記」證實你的懷疑。
再比如,你的程序中包含有某段不能為人所知的代碼,並且你想確保沒有這段代碼程序就不能正常運行。例如,你肯定不希望黑客修改程序中的軟體使用許可驗證代碼,或者可用於解密數字版權管理系統中mp3文件的密鑰。第7章將討論多種防篡改技術,確保受到篡改的程序停止正常運行。
聽說你把密鑰放在可執行文件里了?這主意實在太糟糕了!以往的經驗告訴我們,任何類似「不公開,即安全」 的做法最終都將以失敗告終,而且不管在程序中怎樣隱藏密鑰,最終它都逃不出一個足夠頑強的逆向分析人員的手心。當然,必須承認你的做法也還是對的。本書中介紹的所有技巧都不能保證軟體能永遠免於黑客的毒手。不必保證某個東西永遠處於保密的狀態,也不必保證程序永遠處於不可能被篡改的狀態,更不需要保證代碼永遠不會被剽竊。除非這個研究領域有什麼重大的突破,否則能指望的只是延緩對方的攻擊。我們的目標就是把攻擊者的攻擊速度減緩到足夠低,使他感到攻擊你的軟體十分痛苦或要付出過高的代價,從而放棄攻擊。也可能攻擊者很有耐心地花了很長時間攻破了你的防禦,但這時你已經從這個軟體中賺夠了錢,或者已經用上了更新版本的代碼(這時他得到的東西也就一錢不值了)。
比方說,你是一個付費頻道的運營商,用戶通過機頂盒來觀看你提供的電視節目。每個機頂盒都是帶有標簽的——在代碼的某個位置上存放了分配給每個用戶的唯一標識(ID),這樣你就可以根據用戶的繳費情況決定是允許還是拒絕某個特定用戶觀看頻道里的節目。可是現在有一個黑客團伙找到並且反匯編了這段代碼,發現了計算用戶ID的演算法,並且在網上以低廉的價格把修改用戶ID的方法賣給了網民。這時你該怎麼辦呢?你也許想到了使用防篡改的智能卡,不過這玩意兒並不像看上去那麼難破解,這將在第11章中講解。或者你可能想到要混淆代碼,使之更難以被分析。或者你也可以使用防篡改技術使程序一被修改就自動停止運行。更有可能,你會混合使用上述各種技巧來保護代碼。但是盡管使用了所有技術,你還必須要知道並且必須接受,你的代碼仍然可能被破解,秘密仍會泄露(在這個案例里就是機頂盒裡的用戶ID仍然會被篡改)這一事實。怎麼會這樣呢?這只是因為「不公開,既安全」這個想法在根本上就存在漏洞。不過既然本書中介紹的所有技術都不能給你一個「完美並且長期的安全保證」,那麼為什麼還要使用這些技術,為什麼還要買這樣一本書呢?答案很簡單,代碼能頂住黑客攻擊的時間越長,訂閱頻道的客戶就越多,同時升級機頂盒的周期也就越長,這樣你賺到的錢和省下的錢也就越多。
就這么簡單。
誰使用隱蔽軟體
很多知名的公司都對隱蔽軟體有濃厚的興趣。事實上很難真正掌握有關技術在實踐中具體被使用的程度(因為大多數公司在如何保護自己的代碼一事上絕對是守口如瓶的),但是我們還是可以根據他們專利的申請和擁有情況把他們對隱蔽軟體的感興趣程度猜個八九不離十。微軟公司擁有多個關於軟體水印[104,354]、代碼混淆[62,62,69,69,70,70,180,378]和軟體「胎記」[364]技術的專利。Intertrust公司擁有大量與數字版權管理技術相關的組合式專利,包括代碼混淆和代碼防篡改專利。2004年,在微軟與Intertrust之間的馬拉松式官司落下了帷幕之後,微軟向Intertrust支付了高達4.4億美元的專利使用費,才獲得了後者所有的專利使用許可。同年,微軟也開始與PreEmptive Solution公司開展商業合作[250],從而把PreEmptive Solution開發的identifier obfuscator(PreEmptive solution公司在該工具中擁有專利[351])加到了Visual Studio的工具集里。而普渡大學科研成果的副產品Arxan,因其獨創的防篡改演算法專利[24,305]而成功地開辦了一家公司。蘋果公司擁有一個代碼混淆方面的專利,估計是用於保護其iTune軟體的。Convera,一家從英特爾公司獨立出來的企業,則著力研究應用於數字版權管理的代碼防篡改技術[27,268-270]。從加拿大北方電信公司中分離出來的Cloakware公司也是這個領域里最成功的企業之一。該公司擁有他們稱為「白盒加密」的專利[67,68,182],即把加密演算法和密鑰藏到程序代碼中。2007年12月,Cloakware公司被一家主營付費電視業務的荷蘭公司Irdeto以7250萬美元的價格收購。即使是相對的後來者Sun Microsystem也已經提交了一些代碼混淆領域的專利申請。
Skype的VoIP客戶端也使用了類似Arxan[24]、英特爾[27]及本書中將要提到的[89]代碼混淆和防篡改技術進行了防逆向工程加固。對於Skype公司來說,保護其客戶端的完整性無疑是極其重要的,因為一旦有人成功逆向分析了其客戶端軟體,解析出Skype所使用的網路協議,黑客們就能寫出廉價的能與Skype軟體進行正常通信的程序(這樣的話,人們就沒有必要一定用Skype)。所以保持網路協議不公開則有助於Skype擁有一個龐大的用戶群,這大概也是2005年易貝公司以26億美元收購Skype的原因吧。實際上,使用隱蔽軟體技術還使Skype公司贏得了足夠多的時間,進而成為了VoIP技術的領軍企業。即使這時Skype的協議被分析出來了(這一點黑客們確實也做到了,詳見7.2.4節),黑客們也拿不出一個能夠撼動Skype市場地位的類似軟體了。
學術研究者從多種角度對隱蔽軟體技術進行了研究。一些擁有編譯器和程序語言研究背景的研究者,比如我們,會很自然地加入這一領域的研究,因為涉及代碼轉換的絕大多數演算法都會涉及靜態分析的問題,而這一問題則是編譯優化技術的研究者再熟悉不過的了。盡管以前,密碼學研究者大多不屑於研究「不公開,即安全」的問題,但最近一些密碼學研究人員已經開始把密碼學的相關技術應用於軟體水印以及發現代碼混淆技術的局限性上了。來自多媒體水印、計算機安全和軟體工程方面的研究人員也已經發表了很多關於隱蔽軟體的文章。遺憾的是,由於沒有專門的刊物、學術會議(供研究人員相互之間進行交流),這一領域的研究進展被大大延緩了。事實上,為了使這些研究成果能被傳統的學術會議和期刊接受,研究人員在不停地努力著,現在仍在努力。目前已經發表過隱蔽軟體研究成果的學術會議有POPL(Principles of Programming Languages,程序設計原理)上的ACM專題研討會、信息隱藏研討會、IEEE的軟體工程研討會、高級密碼學會議(CRYPTO)、ISC(Information Security Conference,信息安全大會)以及其他一些關於數字版權管理的學術會議。隨著隱蔽軟體這一領域的研究越來越成為學術研究的主流,我們有望擁有專門針對於隱蔽軟體的期刊、專題討論會甚至是研討會,只是可惜目前為止這一切都還沒有實現。
軍方也在隱蔽軟體上花了很多精力(和納稅人的錢)。比如,Cousot公司擁有的軟體水印演算法[95]專利就歸屬於世界上第九大國防工程承包商法國Thales集團。下面是一段引自最新的(2006)美軍招標文件[303]中有關AT(anti-tamper)技術 研究的文字。
現在,所有的美軍項目執行部門(PEO)和項目管理方(PM)在設計和實現有關系統時,必須在系統中使用軍隊和國防部制定的AT策略。嵌入式軟體現代武器系統的核心,是被保護的最重要技術之一。AT技術能夠有效地保證這些技術不被他國(人)逆向工程分析利用。僅僅由標准編譯器編譯生成而不加AT技術防護的代碼是很容易被逆向分析的。在分析軟體時,逆向工程分析人員會綜合使用諸如調試器、反編譯器、反匯編器等很多工具,也會使用各種靜態和動態分析技巧。而使用AT技術的目的就是使逆向工程變得更為困難,進而防止美國在技術領域的優勢被他國竊取。今後還有必要向部隊的PEO和PM提供更有用、更有效並且多樣化的AT工具集……研發AT技術的目的在於提供一個能夠抗逆向工程分析的高強度殼 ,從而最大限度地遲滯敵方對被保護軟體的攻擊。這樣美國就有機會維持其在高科技領域的優勢或者減緩其武器技術泄密的速度。最終,美軍就能繼續保持其技術優勢,進而保證其軍備的絕對優勢。
這份招標文件來自於美軍導彈和空間程序(設計部門),專注於實時嵌入式系統的保護。我們有理由相信產生這份招標文件的原因是,美軍擔心射向敵方的導彈由於種種原因落地後未能爆炸,使敵方有機會接觸到嵌入在導彈中負責引導導彈飛臨目標上空的控制軟體。
下面是另一段引自美國國防部[115]的文字。
進行主動式軟體保護 (SPI)是國防部的職責之一,它必須開發和部署相關的保護技術,以保證含有國防武器系統關鍵信息的計算機程序的安全。SPI提供的是一種全新的安全防護方法,它並不(像傳統的安全技術那樣)保護計算機或者網路的安全,而只是加強計算機程序自身的安全。這種新方法能顯著提升國防部的信息安全情況。SPI的適用范圍很廣,從台式機到超級計算機上面所有的程序都能使用SPI技術予以保護。它是(軟體保護技術中)完整的一層,是「縱深防禦」的一個範例。SPI技術是對網路防火牆、物理安全等傳統安全技術的一個補充,但是其實現並不依賴於這些傳統的安全設備。現在SPI技術被部署在選定的HPC中心和150多家國防部機關以及其他由商業公司參與建設和維護的軍事基地。廣泛地部署SPI技術將會有效地增強美國和美國國防部對關鍵應用技術的保護。
.上面這段話說明了什麼?它說明美國國防部不僅關心導彈會不會掉到敵方領土上去,還關心在自己的安全系數和性能都很高的計算機中心運行的軟體的安全。事實上,竊密和反竊密是防間諜機關和情報部門之間永恆的主題。比方說,一架戰斗機上的某個程序需要更新一下,這時我們很可能就是用一台筆記本電腦連接到這架戰斗機上進行更新操作。但是萬一這台筆記本電腦不慎遺失了,或者乾脆就被其他國家政府使用某種方法控制了,就像電影里常演的那樣,這時會有什麼情況發生呢?對方會馬上把相關的代碼拿去做逆向工程分析,並把分析的結果用於改進其戰斗機中所使用的軟體。更有甚者,對方會悄悄地在你的軟體中加上一個特洛伊木馬,並讓飛機在特定的時間里從天上掉下來。如果我們不能絕對保證上述這一幕100%不可能發生的話,隱蔽軟體至少可以作為安全防禦的最後一道防線(至少還能做到事後的責任追究)。例如,飛機中的軟體可以用有權訪問相關軟體的人的ID做一個指紋簽名。要是哪天,在其他國家的戰斗機上發現了這些代碼,就可以立即對這些代碼進行逆向分析,並進一步推算出誰是泄密事件的元兇。
什麼?我聽見你說,為什麼我要對政府之間和商業巨頭之間如何保護它們各自的秘密感興趣呢?如果黑客破解了這些軟體,他們也不過是通過自己的勞動換取一些微薄的利益而已啊。話雖如此,但是這些保護技術給你 帶來的好處最終還是大於它給商業巨頭帶來的好處。理由是,對你來說,法律形式的保護措施(如專利、商標和版權)只有當你擁有足夠的財力,能在法庭上把對方告倒的時候才會管用。換而言之,即使你認為某家大公司通過破解你的代碼,剽竊了一個極有「錢途」的主意,你也無力通過那種馬拉松式的官司在法庭上告倒微軟,除非你有足夠的經濟實力能在這種財力的比拼中熬出頭 。而在本書中討論的保護技術(比如代碼混淆和防篡改技術)則既廉價又好用,中小型企業和商業巨頭均可使用。而且如果這時你去告這家大公司的話,也可以用水印或者軟體「胎記」等技術,在法庭上當場拿出代碼被剽竊的真憑實據來。
最後不得不簡單地提一下另一類極其擅長使用隱蔽軟體的人——壞蛋們。病毒的作者已經能非常成功地利用代碼混淆的技術偽裝病毒的代碼,使之逃避殺毒軟體的檢測了。值得一提的是,人們使用這些技術(如保護DVD、游戲和有線電視)時經常被黑客破解,而黑客使用這些技術(如構建惡意軟體)時,人們卻很難抗擊。
本書內容
隱蔽軟體研究的目的是發明能夠盡可能遲滯對手(逆向工程分析)進度,同時又盡可能地減少因為使用該技術,而在程序執行時增加的計算開銷的演算法。同時也需要發明一種評估技術,使我們可以說「在程序中使用了演算法A之後,相對於原先的程序,黑客攻破新程序需要多花T個單位的時間,而新程序增加的性能開銷是0」,或者最低限度我們也應該可以說「相對於演算法B,使用演算法A保護的代碼更難被攻破」。特別要強調一下,隱蔽軟體研究尚處於嬰兒期,雖然我們在書中會把相關的保護演算法和評估演算法全都介紹給大家,但是這門藝術的現狀卻還並不理想(到時候你可不能太失望啊)。
在本書中,我們試圖把當前所有有關隱蔽軟體的研究成果組織起來系統化地介紹給讀者。我們力爭每章內容涵蓋一種技術,並描述這一技術的應用領域以及目前可用的演算法。第1章將給出隱蔽軟體這個領域的一些基本概念;第2章用對抗性演示的模式介紹黑客逆向分析軟體時常用的工具和技巧,然後針對這些工具和技巧介紹如何防範黑客的攻擊;第3章詳細講述黑客和軟體保護方用於分析計算機程序的技術;第4章、第5章和第6章分別介紹與代碼混淆有關的演算法;第7章介紹與防篡改技術相關的演算法;第8章和第9章分別介紹與水印相關的演算法;第10章介紹與軟體「胎記」相關的演算法;第11章講述基於硬體設備的軟體保護技術。
如果你是位企業管理人員,只是對隱蔽軟體的研究現狀和這些技術怎麼應用到你的項目中感興趣,那麼只要閱讀第1章和第2章就夠了。如果你是位擁有編譯器設計背景的研究人員,那麼建議直接跳到第3章開始閱讀。但是之後的章節還是最好順序閱讀。這是因為……呃,還是舉個例子吧,介紹水印技術的章節中會用到在代碼混淆章節中介紹的知識。當然在本書撰寫過程中,我們還是盡量使各章內容都能獨立成章的,所以(如果你擁有一些背景知識)偶爾跳過那麼一兩章也未嘗不可。如果你是一位工程師,想要使用有關技術加固你的軟體,那麼強烈建議你仔仔細細地閱讀第3章的所有內容,如果有條件的話,還應該再搞幾本編譯原理方面的教材惡補一下「程序靜態分析」的知識。然後你就可以隨意跳到感興趣的章節去閱讀了。如果你是名大學生,把本書作為一門課程的教材來閱讀,那麼就應該一頁一頁地完整閱讀本書,期末別忘了做好復習。
希望本書能夠做到兩件事情。首先,希望能向你,親愛的讀者,證明代碼混淆、軟體水印、軟體「胎記」和防篡改等技術里有大量妙不可言的想法,值得你花點時間去學習,而且這些技術也可以用來保護軟體。其次,希望本書能把本領域內當前所有有用的信息匯集在一起,從而為隱蔽軟體的深入研究提供一個良好的起點。
Christian Collberg和Jasvir Nagra
2009年2月2日(土撥鼠日)
P.S.實際上寫作這本書還有第三個目的。要是在閱讀本書時,你突然靈光閃現,冒出一個絕妙的主意,進而激發了你投身於隱蔽軟體研究的雄心壯志,那麼,親愛的讀者,我這第三個目的就算是達到了。請把你的新演算法告訴我們,我們將把它加到本書的下一版里!
❺ C/C++2018年發展前景怎麼樣
C++博大精深,是一門可以學一輩子的語言,如果你有著10年C++開發經驗,各大知名IT公司都會搶著要你;如果你有15年C++開發經驗,年薪百萬不是夢,而且必然小有名氣,在C++圈叱吒風雲。可謂是經驗越多,價值越高,沉澱越厚,絕對是一次投入,終生受益!成為名副其實的永不過時的全棧型IT人才!
從TIOBE語言排行榜中我們可以發現,在過去逾15年的時間里,C++一直穩居最受歡迎語言列表的第三名。對一個老牌語言來說,這個成績不算差了。
在大學里,有很多人早已接觸過C語言編程。他們對C/C++感興趣,自己主動學習。如果在一種好的學習環境下,興趣所在,成長的會很快。這些人,知道自己所學所想,目的很明確,動力也很強,效率很高。
社會上也存在這樣一大波人,非計算機專業,甚至是高中學歷。他們中很多人不知道自己適不適合學C/C++編程,那麼該怎樣判斷自己適不適合編程呢?首先需要確定你是否對編程感興趣,自己是不是想在編程方面發展,如果是的話,建議快速選擇中公優就業進行學習。(相關推薦:中公優就業C/C++周末精品班)
一、C++職位需求量大
2018年,C++職位需求量大的驚人,畢業後根本不用發愁沒有工作,而且高薪!
下圖是C++在智聯招聘上的職位需求。從圖中可以清楚看到:搜索日期是今天日,單單是北京一個城市的職位需求數量就達到了34282個!這么大的缺口誰來填補?你還會發愁找不到工作么?
小編只是把你平時看不到的數據,把這些巨大職位需求展現在你的眼前,扮演著搬運工的角色。我們時刻都在關注著市場動態,為你們提供最新的數據。建議你們也可以多去智聯招聘或者前程無憂上查詢,數據都是絕對真實的!
二、C++稱霸的領域
C++是一門運用很廣泛的計算機編程語言,適合於多種操作系統,因此也有著很廣闊的運用領域。據不完全數據統計,C++在游戲、伺服器端開發、數字圖像處理、編譯器、金融等領域中都是可以被用到的,下面我會給出一些建議。
游戲行業:幾乎所有3A游戲都是使用C++編寫的。大眾公認電子游戲的開發者是軟體行業里回報最高的工作之一,也是需求量最大的領域之一。因為速度非常重要,所以編寫高效的代碼就是最基本的要求。除了要懂C++之外,精通游戲開發更應注重理論與模式的鑽研,而不限於特定的API或者Library。通常還必須具備高超的圖形與數學技能,這些知識足夠你活到老學到老。
HPC:以極限速度處理數據,要求對底層硬體有深刻的理解,這類知識可以直接應用在語言中。通用圖形處理器(GPGPU)及CUDA、OpenCL之類的並行計算框架的出現,引發了對有這類技術的C++程序員的需求。如果深入到科學計算領域,還有很多能做的工作。不知你是否聽說過機器學習?這是當今的熱門話題。
編譯器:這是小編最喜歡的領域,LLVM項目如此成功,以致於很難找到一種既未使用LLVM庫編寫前端,也沒有使用LLVM生成位元組碼的流行語言,而這些全都是C++。盡管編譯器是以各種語言編寫而成,但其背後的實現原理是相同的。我們使用優化器、靜態分析程序、調試程序、標准庫、鏈接器以及所有其他相關的工具來工作。
金融領域:除此之外,金融領域也有很多工作需要有能力編寫低延遲代碼的程序員。在這個領域,數學背景也是一大加分亮點。該領域的大多工作可能都涉及到開發與維護高頻使用的交易平台。另外如果不想掛著程序員的名頭,這個領域也是很棒的選擇。可以說負責設計並實現金融數學模型的寬客(Quant)職位是所有程序員中最有可能獲得高額獎勵的。
以上只是小編的幾個建議,這些領域的共通點在於:無法通過數量取勝。也就是說,C++工程師的可替換性很低,公司必須付給他們更高的薪水,並讓他們解決自己感興趣的問題,才能把人留住。如果你對C/C++還有什麼想要了解的問題,請關注優就業IT常見問題欄目。