天天看點

改造Visual C++ 2008 Express

Visual Studio确實很強大,但不是免費的,其實Express已經夠用了,代碼提示雖然沒有裝了VC助手的VS好,但尚可接受,另我非常喜歡的ViEmu插件在Express中不能用,這個可以通過配置鍵盤方案為emacs來彌補—— 2010.11.01:express裡的emacs鍵綁定沒這個XKeymacs好用!。

Express沒包含ATL和MFC,但現在最新版的WDK卻已經支援到ATL71和MFC42了。其實寫個簡單的MFC程式MFC42已經足夠,甚至不需要靜态連結MFC,因為其它機子98以上就有mfc42.dll了,這樣編譯出來的程式将更小 。使用ATL71可能需要靜态連結,因為其它機子上可能沒有ATL71.DLL。但是好在雖然WTL使用了ATL但編譯出來的程式并沒有連結ATL庫,是以配置下Express可以拿來寫WTL程式。

配置WTL環境很簡單的,可以參考codeproject上的文章。下面說說怎麼使用WDK中的toolchain編譯出隻跟VC6一樣的可執行程式。

WDK的bin目錄中的cl.exe對C++的支援比VC6好多了,但是它編譯出來的程式卻隻連結msvcrt.dll,有點奇怪但是程式并不能運作,據說這個msvcrt.dll是vista上的版本,那這就不奇怪了。正當我要放棄時發現了這個貼子,它裡面的方法正好有用:《d大能不能給個VC2008連結msvcrt.dll的詳細教程》http://tieba.baidu.com/f?kz=739007330

到此ATL+WTL+MFC環境都有了,而且生成的程式隻需要連結msvcrt.dll和msvcp60.dll等——反正跟VC6生成的檔案差不多的效果,但是對C++支援又比VC6好很多的(VC6編譯string就比較吃力了,map就更甚了)。

主要是VC Directories的配置,對于msvcrt_win2000.obj,可以把它加入到D:\Program Files\Microsoft Visual Studio 9.0\VC\VCProjectDefaults\CoreWin.vsprops裡,但是編譯MFC程式時又要手動添加到link addtional lib中。

所需:WDK最新版,PSDK2003R2,WTL最新版本(sourceforge.net上的),配置見圖:

bin目錄,編譯toolchain所需要的所有工具,清單工具mt.exe要用到PSDK2003裡的——2010.11.01:再添加express的路徑,某些MFC程式要用到bscmake.exe——(如果編譯提示spawning什麼的就是缺少那個工具,可以到相關目錄搜尋):

改造Visual C++ 2008 Express

include目錄,最好跟編譯配套,是以使用WDK中的,PSDK提供了mfc的res:

改造Visual C++ 2008 Express

lib目錄,一些如psapi需要PSDK裡的lib:

改造Visual C++ 2008 Express

項目裡設定C++ Code Generation(代碼生成)為/MD,如果用了MFC則設定為shared mfc dll,如果生成的可執行檔案提示無法定位msvcrt.dll上的函數的話,就添加msvcrt_win2000.obj到link的lib中。2010.11.01:一些MFC程式如果提示無法定位except_common4什麼的需要手動加msvcrt_win2000.obj!

Release版本按上面弄基本上沒什麼問題,Debug可能需要更多設定,但我隻關心Release版本。