- CE6 其實支持MFC的,但生成SDK時,沒有相關的選項, 要自己把相關的庫,文件加進去.
方法2:
開發平臺由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,在系統上運行正常。成功!