如何在Windows Mobile 6.1(WM6.1)设备上使用WM2003二进制文件(dll)? (PE-loader不能接受旧的二进制文件)

问题描述 投票:1回答:2

嗨!

我有一个旧的插件(作为二进制文件,dll),由我的应用程序使用。它是为WM2003打造的。现在它崩溃的应用程序,如果加载在Windows Mobile 6.1(WM5工作正常,WM6也是如此)。

源代码不可用,开发人员不再支持它。所以我不能为WM6.1重建它。

是否可以修补或转换二进制文件以使其能够在WM6.1上运行?如果是这样,我该怎么做?

谢谢。


编辑:我发现,problem is in PE loader,在WM6.1上的行为不一样(与WM6和之前的版本相比)。

dll windows-mobile portable-executable windows-mobile-6.1
2个回答
2
投票

这个插件是使用MFC还是ATL?早期版本的WinMo有一个不同的ATL / MFC版本,因此在Studio中编写的MFC或ATL应用程序将无法工作,除非您将新的ATL / MFC库与应用程序一起部署,就像旧的应用程序无法在新设备上运行一样除非您部署旧的MFC / ATL库。


0
投票

这个问题很少见,但可以找到一些信息。

常见的解决方案是在VS2008(TCPMP new VS2008 builds for WM6.1)中重建二进制文件,但如果您没有源代码,这将无济于事。

我在cegcc邮件列表(arm-wince-cegcc on Windows Mobile 6.1)中找到了问题解释和另一个解决方案。在Windows Mobile 6.1 Memory Management计划是变化。

从Windows Mobile 2003到Windows Mobile 6.0,此插槽安排保持不变。但是,随着Windows Mobile 6.1的发布,事情发生了变化,以减少DLL压力并帮助设备管理器进程空间。

在Windows Mobile 6.1中,不再在进程的插槽中分配设备管理器的堆栈。相反,操作系统使用位于大内存区域顶部的插槽59作为设备管理器线程堆栈。 ...

此问题的解决方法是在注册表中声明DLL(告诉操作系统不要将其加载到高内存中)。

我不喜欢这种解决方法,所以我尝试找一些二进制修补程序。并发现它:)

它不是真正的修补程序,它是UPX - the Ultimate Packer for eXecutables。但它完美地解决了这个问题。用UPX打包的DLL不会崩溃应用程序并运行正常。

© www.soinside.com 2019 - 2024. All rights reserved.