我编写了一个32位应用程序,它启动了一个16位可执行文件,它可以加载一些16位DLL来执行某些应用程序的功能。它在Windows 7 32位上运行良好,但在Windows 7 64位上运行不正常,因为该版本的操作系统不包含NTVDM。
代码的16位部分非常广泛,并且移植到32位会非常昂贵。此外,它还使用了一些不再营业的公司的第三方16位API;因此,必须完全重新创建该代码,从而增加成本。
有没有办法直接从32位应用程序加载现有的16位DLL,完全删除16位可执行文件?
我已经研究过thunking,但它似乎也不支持Windows 7。
答案 0 :(得分:1)
没有。这在Windows中是不可能的。
答案 1 :(得分:1)
您必须使用模拟器或虚拟机。
或者,如果那不是一个选项,那么你可以自己编写一个原始模拟器,逐个指令读取机器码并相应地修改伪寄存器和内存,当程序向外调用时那么你将不得不产生回应。