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

时间:2010-02-05 21:08:05

标签: dll windows-mobile portable-executable windows-mobile-6.1

你好!

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

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

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

谢谢。


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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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不会崩溃应用程序并运行正常。