使用wxWidgets编译的Windows Mobile程序运行时提示“SHCreateMenuBar failed”错误的解决方法

 

故障现象:

使用wxWidgets,在windows平台下编译下运行成功;但编译用于WindowsMobile平台的程序时,运行时提示在调用"tbarwce.cpp"中的“wxToolMenuBar::MSWCreateToolbar”函数时出现“SHCreateMenuBar failed”错误。因而无法显示程序的菜单。

 

解决方法:

通过网络查找这个错误的解决方法,最后都没有明确指出解决问题的方法。通过MSDN查找“SHCreateMenuBar”函数的说明,并阅读wxWidgets的原代码及示例程序,发现有几个地方可能造成这个错误:

  1. 程序必须要建立资源文件,且在其中包含“wx/msw/wx.rc”
  2. 在编译Windows Mobile程序时,要在资源编译选项程序编译选项中均要设置“_WIN32_WCE”预编译选项

 

原因分析:

因为“SHCreateMenuBar”函数调用时要传入菜单资源的id号,而这个id号在程序中当有“_WIN32_WCE”预编译选项时用的是“5000”(magic number)。 在"wx.rc"文件中,当设置“_WIN32_WCE”预编译选项时,会"#include "wx/msw/wince/wince.rc"",在“wince.rc”文件中包含了id为“5000”的菜单资源,同样使用magic number。如果未成功地设置前面所述的两个解决要点,在调用“SHCreateMenuBar”时就会出现前文所述的错误。

 

其它经验:

这个问题又一次验证了程序编码时的经验,不要使用 magic number,如果前文中的“5000”是用符号来表示的,那么在编译时就可能会现出符号无法找到错误,排错的过程就会更有针对性,也更加快捷。

posted @ 2008-12-11 10:49  easyti  阅读(705)  评论(1编辑  收藏  举报