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什么的就是缺少那个工具,可以到相关目录搜索):
include目录,最好跟编译配套,所以使用WDK中的,PSDK提供了mfc的res:
lib目录,一些如psapi需要PSDK里的lib:
项目里设置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版本。