要想SDK支持MFC需要做一下工作:
1)必需先编译通过自己的OS Design工程
a.在Catalog Items View中选择自己要添加到OS Design中的组件
在这里有一点很重要,打开Catalog Items View,查找C++ Runtime Support for Exception Handling and Runtime Type Information 项,在前面打钩 。 否则在生成SDK之后,用此SDK上的MFC程序会出现很多的 LINK 错误,但是编译不会出错:
error LNK2001: unresolved external symbol "const type_info::`vftable'" (??_7type_info@@6B @)
error LNK2001 : unresolved external symbol ___CxxFrameHandler
等等。。。 error LNK2001的错误
为了这个问题找了一个下午,终于在一篇帖子里看到了答案,
http://topic.csdn.net/u/20081106/16/4bdaf614-3135-41a4-8777-c513ba0449c0.html
b.将../Program Files/Microsoft Visual Studio 8/VC/ce/Dll/armv4i下的有关MFC的 DLL拷贝到目录..:/WINCE600/PLATFORM下,当然也可以放到你认为可以放的目录下,然后配置你OS Design中所选择了BSP中的platform.bib ,在你所用的BSP文件夹中搜索platform.bib,然后用记事本打开,编辑
我的配置如下:
MODULES
; Name Path Memory Type
; ---------- ---------------------------------- -----------
;-------------------------------------------------------------------------------
;Inorder support MFC and include the MFC dll
MFC80CHS.DLL $(_PLATFORMROOT)/MFC80CHS.DLL NK SHK
MFC80CHT.DLL $(_PLATFORMROOT)/MFC80CHT.DLL NK SHK
MFC80DEU.DLL $(_PLATFORMROOT)/MFC80DEU.DLL NK SHK
MFC80ENU.DLL $(_PLATFORMROOT)/MFC80ENU.DLL NK SHK
MFC80ESP.DLL $(_PLATFORMROOT)/MFC80ESP.DLL NK SHK
MFC80FRA.DLL $(_PLATFORMROOT)/MFC80FRA.DLL NK SHK
MFC80ITA.DLL $(_PLATFORMROOT)/MFC80ITA.DLL NK SHK
MFC80JPN.DLL $(_PLATFORMROOT)/MFC80JPN.DLL NK SHK
MFC80KOR.DLL $(_PLATFORMROOT)/MFC80KOR.DLL NK SHK
MFC80U.DLL $(_PLATFORMROOT)/MFC80U.DLL NK SHK
MFC80UD.DLL $(_PLATFORMROOT)/MFC80UD.DLL NK SHK
这里(_PLATFORMROOT)就是 ..:/WINCE600/PLATFORM
c.重新编译OS
生成SDK的过程比较容易,但是生成之后的可用效果就再说了。
1,首先 在上文的WINCE 6.0 OS的项目中,点击 项目 | Add New SDK
最重要的是在Additional Folders项中添加我们要添加的一些头文件,lib库文件以及源文件。
要添加了文件所在位置,如下:
mfc头文件:
../Program Files/Microsoft Visual Studio 8/VC/ce/atlmfc/include
LIB文件:
../Program Files/Microsoft Visual Studio 8/VC/ce/atlmfc/lib/armv4i
源文件:
../Program Files/Microsoft Visual Studio 8/VC/ce/atlmfc/src
上面的这些都是“源路径”那么“Target路径”呢?“目标路径”都写的是相当路径,都是相对于如下路径的路径:
../WINCE600/OSDesigns/NavDar/NavDar/SDKs/SDK2/obj/你自己配置的SDK名称
相对路径我们都设置成如下:
mfc头文件: mfc/include
LIB文件: mfc/lib/armv4i
源文件: mfc/src
如图:
另外,需要用仿真器调试,或者你在编译部署MFC的时候有如下错误提示:
1>设备未准备好。如果目标是 ActiveSync 设备,请验证 ActiveSync 连接是否在运行。
1>
1>连接到设备失败。
1>
========== 部署: 0 已成功, 1 已失败, 0 已跳过 ==========
在Emulator中,将Configuration修改为Device Emulator ARMV4I Debug,或者Device Emulator ARMV4I Release
填写模拟器的信息后点击确定。在这里内存:128M,宽:480,高:600,16位色显示。
OK,这样使用“build all sdks...” 生成的SDK大小为20M左右。
但是这样生成的SDK还有一个问题,不支持中文显示,中文显示为一个一个口口。
解决此问题需要在SDK中添加中文字体。