locked
C++程序在XP Embedded SP2上运行失败 RRS feed

  • 问题

  • 大家好! 

    对于Windows XP Embedded,本人是个新手! 
    现有一个C++程序在XP Embedded SP2上运行失败。 
    请看下面的截图: 
    [http://aviary.com/artists/henry436/creations/error ]
    希望的运行结果为: 
    [http://aviary.com/artists/henry436/creations/succeed ]
    该程序在以下环境中测试通过:
    (Mobile XP Full beta2bu1490 系统文件.exe + 系统附属文件bu1.3(SP2专用CAB格式).exe)(感谢happymy
    个人理解为:目标设备上的系统文件夹(%Windows%%system32%)缺少相应的dll文件。
    任何建议或者帮助,都将十分感谢!
    2010年3月2日 6:38

答案

  • starstar 你提交的demo在我构建的XPE上工作正常,请把你的XPE工程文件(你的SLD、SLX文件)给我。我才能帮你。
    肖正波我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    2010年3月24日 11:35
    版主

全部回复

  • Visual C++ Runtime Libraries等几个组件(他们都在一起排着。)
    如果还不行建议你用filemon这类的工具抓一下程序对文件读写。

    肖正波 我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    2010年3月2日 7:32
    版主
  • 非常感谢您的点拨!测试后,回来给您好消息。
    2010年3月2日 9:29
  • happymy, 您好!

    首先,问题依然没有得到解决。

    第一,filemon无法在上面提到的MXP系统上使用:错误信息为“List cannot created”,估计是不能生成列表。
    因为,没有列表生成,也就不能导出日志文件。

    第二,通过在XP系统上测试,filemon检测到该程序,依次调用(%Windows%%system32%下面32个dll文件)(%Windows%%WINSXS%下面一个文件)(%Windows%下面一个文件)。经过对比,目标平台只缺少(MSCTFP.dll)文件,拷贝后运行程序,界面错误(字体以及排版)仍然存在。

    我同时在另外一个讨论区发出了请求,请看下面的链接:

    困惑中。。。


    2010年3月3日 1:31
  • 1 filemon请在XP下使用。
    2程序的UI乱码?
    可能是缺少字体,看看你程序是不是使用了特殊的字体,如果不是请:
    检查工程文件中语言的相关设置。例如:如果你的程序UI是简体中文,检查是否添加了中文支持。

    不要添加过多的字体和codepage这会导致乱码,添加最小限度的字体和codepage即可。


    肖正波 我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    2010年3月3日 2:30
    版主
  • 非常感谢您的热心帮助!

    汇报一下进展情况(很渺小,呵呵)。

    1.Process Monitor(是Filemon 和 Regmon的结合品)[http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx]. 
      该软件可以在MXP上成功运行,并记录了c++程序运行的日志。
      但是,在目标平台上运行出错,错误信息:“Process Monitor requires Windows XP SP2 or higher.”
      该设备的系统属性为:“Microsoft Windows XP Embedded Version 2002 Service Pack 2”
      MXP的版本信息为:“Microsoft Windows Xp 嵌入式 版本 2002”。
      为什么有这个错误呢?
      
      通过研究日志记录,目标系统与MXP相比,并未缺少必要的字体以及系统组件(包含所有标准的Windows字体,支持MFC)。
      我将源程序,统一设置字体(Microsoft Sans Serif),语言设为英语,使用MFC作为静态链接库。
      编译后测试结果为:部分显示正常,少部分文字、按钮和弹出窗口存在问题。

    2.继续在网络上探索,讨论最多的两点是:Font problem 和 Codepage,或二者兼有。



      他们讨论的问题没有均没有明确的解决办法!可能是XP Embedded系统需要进行相应的设置。
      
      第一次遇到这样的问题,感叹Embedded系统——如此复杂!
    2010年3月5日 7:41
  • 删除工程文件中所有的Font和Codepage!!!!
    找到你工程文件中相关的MUI组件!
    打开组件的设置,里面选(最少,min)的Font和Codepage(好像里面有三个按钮分别是none、max、min)
    进行依赖性检查
    构件系统


    肖正波 我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    2010年3月5日 14:46
    版主
  • 再次感谢您热心的帮助! 

    程序界面显示问题得到了解决!(Cheers!) 

    解决途径是对工程下的资源文件进行如下修改:
     原始出错定义:
     /////////////////////////////////////////////////////////////////////////////
     IDD_DIALOG_ABC DIALOGEX 0, 0, 337, 151 
    STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU 
    EXSTYLE WS_EX_CLIENTEDGE(或者其他的,如: “EXSTYLE WS_EX_APPWINDOW”)
     ..... 
    ///////////////////////////////////////////////////////////////////////////// 
    修改为如下,并且删除对话框的扩展式样“EXSTYLE”。
     ///////////////////////////////////////////////////////////////////////////// 
    IDD_DIALOG_ABC DIALOG DISCARDABLE 0, 0, 337, 151 
    STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
     ///////////////////////////////////////////////////////////////////////////// 

    重新组建后,程序显示和运行正常。 
    思考: 
    修改前程序在其他平台运行正常,移至目标设备上(windows XP embedded)运行时界面出错。 
    这是否意味着系统缺少什么? 
    换句话说:除了修改代码以外,是否有其他解决办法? 

     感谢您的时间!在线等您的回复。 谢谢!
    2010年3月9日 0:52
  • 你用XPP 的英文版测试看看,我感觉是缺少主体一类的支持。
    你可以写个demo给我,我测试看看。
    肖正波 我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    2010年3月10日 14:28
    版主
  • 您好!

    Demo写好了。附件发送到(MSN:questor_87@hotmail.com),您可以接受吗?
    新建了一个Win32 Application,资源和字体分别设置为:English (U.S.) ,MS Sans Serif。
    最主要的区别在资源文件里,请看下面的代码:
    /////////////////////////////////////////////////////////////////////////////
    //display correctly
    //
    //IDD_ABOUTBOX DIALOG DISCARDABLE 22, 17, 230, 75
    //STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
    //CAPTION "About"
    //FONT 8, "MS Sans Serif"
    //BEGIN
    //    ICON            IDI_TEST11,IDC_MYICON,14,9,20,20
    //    LTEXT           "I love you!",IDC_STATIC,49,10,119,8
    //    LTEXT           "Copyright (C) 2010",IDC_STATIC,49,20,119,8
    //    PUSHBUTTON      "OK",IDOK,195,6,30,11
    //END

    /////////////////////////////////////////////////////////////////////////////
    //
    //display error,even without the "EXSTYLE" definition
    //
    IDD_ABOUTBOX DIALOGEX 22, 17, 230, 75
    STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
    //EXSTYLE WS_EX_CLIENTEDGE
    CAPTION "About"
    FONT 8, "MS Sans Serif", 0, 0, 0x1
    BEGIN
        ICON            IDI_TEST11,IDC_MYICON,14,9,20,20
        LTEXT           "I love you!",IDC_STATIC,49,10,119,8
        LTEXT           "Copyright (C) 2010",IDC_STATIC,49,20,119,8
        PUSHBUTTON      "OK",IDOK,195,6,30,11
    END


    下面是我在目标机器(XP Embedded)以及桌面系统(XP)上,测试后的截图:
    (请点击Help,然后About)
    正确的效果:
    错误的效果:

    XP系统的效果:


    再次感谢您的时间!
    2010年3月11日 2:39
  • 我感觉下面网页上讨论的内容,可能有帮助。
    但是,还是不太清楚:除了修改代码以外,是否还有其他的解决办法。


    这是另外一个网页上讨论的内容:
    缺省的基于对话框的应用程序在Win32s中不工作。  
    当AppWizard产生一个基于对话框的应用程序时,它为主对话框使用一个DIALOGEX资源。但是,Win32s不支持DIALOGEX资源。结果,在Win32s中,对话框看起来有点不对。通过从对话框编辑器中去掉WS_EX_APPWINDOW类型和在.rc文件中将DIALOGEX声明改为DIALOG声明,可以对这个问题进行修正。

    这个类似:
    MFC 3.x转换为4.0的常见问题
    8.BUG:缺省的基于对话框的应用程序在Win32s中不工作。 

    当AppWizard产生一个基于对话框的应用程序时,它为主对话框使用一个DIALOGEX资源。但是,Win32s不支持DIALOGEX资源。结果,在Win32s中,对话框看起来有点不对。通过从对话框编辑器中去掉WS_EX_APPWINDOW类型和在.rc文件中将DIALOGEX声明改为DIALOG声明,可以对这个问题进行修正。

    谢谢您的关注!
    2010年3月12日 1:45
  • 我用以前我构建的系统检查你的demo,发现它们都正常工作。
    所以肯定是少组件。
    请把你的工程文件发给我。
    以及工程文件中的自定义组件。
    谢谢

    肖正波 我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    2010年3月15日 13:11
    版主
  • 我感觉下面网页上讨论的内容,可能有帮助。
    但是,还是不太清楚:除了修改代码以外,是否还有其他的解决办法。


    这是另外一个网页上讨论的内容:
    缺省的基于对话框的应用程序在Win32s中不工作。  
    当AppWizard产生一个基于对话框的应用程序时,它为主对话框使用一个DIALOGEX资源。但是,Win32s不支持DIALOGEX资源。结果,在Win32s中,对话框看起来有点不对。通过从对话框编辑器中去掉WS_EX_APPWINDOW类型和在.rc文件中将DIALOGEX声明改为DIALOG声明,可以对这个问题进行修正。

    这个类似:
    MFC 3.x转换为4.0的常见问题
    8.BUG:缺省的基于对话框的应用程序在Win32s中不工作。 

    当AppWizard产生一个基于对话框的应用程序时,它为主对话框使用一个DIALOGEX资源。但是,Win32s不支持DIALOGEX资源。结果,在Win32s中,对话框看起来有点不对。通过从对话框编辑器中去掉WS_EX_APPWINDOW类型和在.rc文件中将DIALOGEX声明改为DIALOG声明,可以对这个问题进行修正。

    谢谢您的关注!
    请问不修改代码怎么解决程序UI显示的问题呢?谢谢!!!
    2010年3月22日 9:13
  • 请先把你的XPE工程文件发给我!!
    肖正波 我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    2010年3月22日 17:25
    版主
  • mn106,你好!

    不好意思,我还没有找到方法。可能修改代码是唯一的途径。祝好!

    2010年3月24日 8:26
  • 肖先生,您好!

    请问:“XPE工程文件”,是指Windows XP Embedded的系统镜像吗?

    或者,使用VS Design的系统,对吗?

    我没有这个工程文件,系统是预装在设备上的。所以,不可能重新设计系统了。 

    非常感谢您的热心帮助!

     

    2010年3月24日 8:33
  • starstar你好,看看这个网站说的是否有用。

    XPE\WES部分窗体字体乱码的解决方案   http://lzg-ad.blog.sohu.com/140480016.html

    还有“XPE工程文件”就是用target designer 打开的slx文件。

    2010年3月24日 8:41
  • starstar 你提交的demo在我构建的XPE上工作正常,请把你的XPE工程文件(你的SLD、SLX文件)给我。我才能帮你。
    肖正波我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    2010年3月24日 11:35
    版主