嗨!
我有一个旧插件(二进制,dll),用于我的应用程序。它是为WM2003而建的。现在,如果加载到WindowsMobile6.1 (WM5工作正常,WM6也一样),该应用程序就会崩溃。
源代码不可用,开发人员也不再支持它。所以我不能为WM6.1重建它。
是否可以对二进制文件进行修补或转换以使其能够在WM6.1上工作?如果是的话,我怎样才能做到呢?
谢谢你,
编辑:我发现,在WM6.1上的作用与PE装载机出了问题不一样(与WM6和更早版本相比)。
发布于 2010-02-08 19:03:23
这个问题很少见,但是可以找到一些信息。
常见的解决方案是在VS2008 (TCPMP为WM6.1构建新的VS2008)中重新构建二进制文件,但如果没有源代码,这将于事无补。
我在cegcc邮件列表(WindowsMobile6.1上的arm-wince)中找到了问题的解释和另一个解决方案。在WindowsMobile6.1内存管理方案中发生了变化。
从Windows 2003到WindowsMobile6.0,这种插槽安排一直保持不变。但是,随着WindowsMobile6.1的发布,事情发生了改变,以减少DLL压力,并帮助解决设备管理器进程空间中的问题。 在WindowsMobile6.1中,设备管理器的堆栈不再分配到进程的时隙中。相反,操作系统使用插槽59,位于大内存区域的顶部,用于设备管理器线程堆栈。..。
解决此问题的方法是在注册表中声明DLL (告诉操作系统不要在高内存中加载DLL)。
我不喜欢这个解决办法,所以我试着找一些二进制补丁程序。并发现:)
这不是一个真正的补丁,它是UPX - 对于eXecutables。但它完美地解决了问题。包含UPX的DLL不会使应用程序崩溃并运行良好。
发布于 2010-02-06 01:07:58
这个插件是否使用MFC或ATL?早期版本的WinMo有不同的ATL/MFC版本,因此在Studio中编写的MFC或ATL应用程序将无法工作,除非您将较新的ATL/MFC库与应用程序一起部署,就像旧的应用程序将无法在新设备上运行一样,除非您部署旧的MFC/ATL库。
https://stackoverflow.com/questions/2210426
复制相似问题