有一些程序之所以无法在 WinXP 下运行,除了子系统版本号之外,还有编译器 C 库的原因。VC2012 和 VC2013 在打某个补丁之前编译出来的 EXE/DLL 会使用到 Vista 以后才有的系统 API 函数。无法运行的现象是:“无法定位程序输入点 XXX 于动态链接库 KERNEL32.DLL”。在没有源代码重新编译的情况下,我做了一个中间跳转的代理库,基本可以解决这个问题。原理很简单,就是系统有这个 API 函数就直接跳转过去,没有就使用自己实现的替换函数。下载地址在这里:https://github.com/prefetchnta/questlab/raw/master/bin/kernel33.dll。由于这个只是用来解决我所遇到的无法运行的问题的,因此并没有补完所有 WinXP 缺失的函数(也不可能全补完),同时只映射了绝大部分 KERNEL32.dll 的 API 函数(大概 99%),所以并不能解决所有的此类问题。但是原理上是行得通的,而且也已经开源了(QuestLAB 里的 BackPort 子项目)。使用的方法就是把 EXE/DLL 导入表的 KERNEL32.dll 字符串改成 KERNEL33.dll 即可。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理