发表于:2010/3/2 9:30:15
#0楼
开发平台由Windows CE.NET转到Windows Embedded CE 6.0,所以操作系统要重新定制。因为之前的程序几乎清一色的都是基于MFC的,所以新系统中要加入MFC的支持。找遍Application and Service Development下的Catalog Item竟然找不到MFC的影子。查看文档Windows Embedded CE Features找到Application and Service Development Catalog Item中对MFC的说明,Catalog Item列表项中有对MFC的说明,也有Sysgen变量SYSGEN_MFC,在Description中最后有这样一句:This Catalog item is only available in display-based OS designs.
我想,我们开发操作系统和的应用程序肯定是有图形界面显示的,既然有这句话应该能把MFC加进去。我开始的做法是自己手动设置SYSGEN_MFC变量,编译后NK.bin大小没有变化,启动后看不到MFC库文件。看来这个方法是行不通的。
要加入对MFC的支持,只是把MFC的动态链接库加入到操作系统镜像文件nk.bin中即可。想到这点,解决的方法就简单了。在VS2005安装目录下可以找到Windows CE的MFC DLL。
我的做法是:
1:在VS2005目录下找到MFC DLL。在我的电脑上目录是D:\Program Files\Microsoft Visual Studio 8\VC\ce\Dll\x86。因为我用的平台是基于CEPC,所以选择x86目录。
2:复制MFC DLL到%WINCE_ROOT%\OSDesigns\MFC目录。将x86下的所有dll文件复制到MFC目录,MFC目录是自己创建的目录,也可以是其他名称。不是所有的dll文件都会用到,只是为了省事。
3:设置Custom Build Actions。打开平台的Property Pages,在Configration Properties的Custom Build Pages 的tab页中,将Build step下拉框中选中Pre-Make Image。点击下面的New...按钮,在弹出的对话框中输入copy %_WINCEROOT%\OSDesigns\MFC\ %_FLATRELEASEDIR%\。这里输入的是DOS命令,命令中可以使用Windows CE中设置的环境变量。上面的命令是把MFC目录下的dll文件拷贝到%_FLATRELEASEDIR%目录中,同样地,不是所有的dll文件都会用到。
4:修改配置文件。在Project.bib文件中把下面几句加进去,
MFC80U.DLL $(_FLATRELEASEDIR)\MFC80U.DLL NK SH
MFC80UD.DLL $(_FLATRELEASEDIR)\MFC80UD.DLL NK SH
MFC80ENU.DLL $(_FLATRELEASEDIR)\MFC80ENU.DLL NK SH
atl80.dll $(_FLATRELEASEDIR)\atl80.dll NK SH
msvcr80.dll $(_FLATRELEASEDIR)\msvcr80.dll NK SH
msvcr80D.dll $(_FLATRELEASEDIR)\msvcr80D.dll NK SH
如果想要在以后的操作系统设计中都用到这样的配置,可以加到Platform.bib文件中。
MFC80ENU.DLL是英文资源文件,根据你所使用的语言选择不同的资源DLL文件。调试版DLL也可不必加入到操作系统镜像中,根据需要可以做具体修改。
5:构建。得到支持MFC的Windows Embedded CE6.0平台,运行后在\Windows目录下可以看到MFC的几个DLL文件。
如果已经创建了nk.bin文件,不想再花半个小时从头创建的话,可以把用到的MFC DLL文件直接拷贝到%_FLATRELEASEDIR%\下。然后修改Project.bib文件,找到Project.bib,将其拷贝到%_FLATRELEASEDIR%\下。在VS2005的Build菜单中,点击Open Release Directory in Build Window,打开命令行窗口,输入makeimg命令,创建nk.bin。这个过程只要两三分钟的时间。
写了一个基于MFC的对话框程序,设置为动态链接MFC DLL,在系统上运行正常。成功!
我想,我们开发操作系统和的应用程序肯定是有图形界面显示的,既然有这句话应该能把MFC加进去。我开始的做法是自己手动设置SYSGEN_MFC变量,编译后NK.bin大小没有变化,启动后看不到MFC库文件。看来这个方法是行不通的。
要加入对MFC的支持,只是把MFC的动态链接库加入到操作系统镜像文件nk.bin中即可。想到这点,解决的方法就简单了。在VS2005安装目录下可以找到Windows CE的MFC DLL。
我的做法是:
1:在VS2005目录下找到MFC DLL。在我的电脑上目录是D:\Program Files\Microsoft Visual Studio 8\VC\ce\Dll\x86。因为我用的平台是基于CEPC,所以选择x86目录。
2:复制MFC DLL到%WINCE_ROOT%\OSDesigns\MFC目录。将x86下的所有dll文件复制到MFC目录,MFC目录是自己创建的目录,也可以是其他名称。不是所有的dll文件都会用到,只是为了省事。
3:设置Custom Build Actions。打开平台的Property Pages,在Configration Properties的Custom Build Pages 的tab页中,将Build step下拉框中选中Pre-Make Image。点击下面的New...按钮,在弹出的对话框中输入copy %_WINCEROOT%\OSDesigns\MFC\ %_FLATRELEASEDIR%\。这里输入的是DOS命令,命令中可以使用Windows CE中设置的环境变量。上面的命令是把MFC目录下的dll文件拷贝到%_FLATRELEASEDIR%目录中,同样地,不是所有的dll文件都会用到。
4:修改配置文件。在Project.bib文件中把下面几句加进去,
MFC80U.DLL $(_FLATRELEASEDIR)\MFC80U.DLL NK SH
MFC80UD.DLL $(_FLATRELEASEDIR)\MFC80UD.DLL NK SH
MFC80ENU.DLL $(_FLATRELEASEDIR)\MFC80ENU.DLL NK SH
atl80.dll $(_FLATRELEASEDIR)\atl80.dll NK SH
msvcr80.dll $(_FLATRELEASEDIR)\msvcr80.dll NK SH
msvcr80D.dll $(_FLATRELEASEDIR)\msvcr80D.dll NK SH
如果想要在以后的操作系统设计中都用到这样的配置,可以加到Platform.bib文件中。
MFC80ENU.DLL是英文资源文件,根据你所使用的语言选择不同的资源DLL文件。调试版DLL也可不必加入到操作系统镜像中,根据需要可以做具体修改。
5:构建。得到支持MFC的Windows Embedded CE6.0平台,运行后在\Windows目录下可以看到MFC的几个DLL文件。
如果已经创建了nk.bin文件,不想再花半个小时从头创建的话,可以把用到的MFC DLL文件直接拷贝到%_FLATRELEASEDIR%\下。然后修改Project.bib文件,找到Project.bib,将其拷贝到%_FLATRELEASEDIR%\下。在VS2005的Build菜单中,点击Open Release Directory in Build Window,打开命令行窗口,输入makeimg命令,创建nk.bin。这个过程只要两三分钟的时间。
写了一个基于MFC的对话框程序,设置为动态链接MFC DLL,在系统上运行正常。成功!