为什么我的WINVER 4 .exe在W98SE下运行?

时间:2012-10-03 20:38:34

标签: windows

我需要为运行Windows 98SE的遗留系统构建我的应用程序。 (系统涉及特殊硬件,不可能进行操作系统升级。)我的开发环境是Visual C ++;该应用程序是vanilla ANSI C,结果是WIN32控制台应用程序。

我知道在Visual Studio 2008中对旧版Windows的支持完全被删除了,所以我使用的是Visual Studio 2005(我在上一代Windows XP笔记本电脑上仍然使用它)。我有条件编译,以避免调用W98SE下不可用的API函数,我知道不使用Unicode。

n.b。 这一切都用于工作。我以前成功构建了W98SE可执行文件。不知。

我构建的应用程序失败了“期待更新版本的Windows。升级Windows版本”。

我已经使用十六进制编辑器检查了.exe文件,并且WINVER值(在这种情况下是偏移288十进制)是4,应该是。在正常构建中,即对于现代Windows版本,WINVER值(在这种情况下是偏移296十进制)是5.那么WINVER = 4版本如何导致“Expects an new version”错误报道?

1 个答案:

答案 0 :(得分:2)

您很可能已将其与更新的运行时库MSVCRT.DLL相关联。 请尝试以下方法:

dumpbin /dependents myfile.exe

如果显示MSVCRTnn.DLL,则表示您遇到了麻烦。 如果它显示MSVCRT.DLL(没有数字),你应该很好,但仍然要谨慎。

可能最简单的解决方案是静态链接运行时库: 在项目属性中,在C / C ++下,代码生成,将运行时库设置为/ MT或/ MTd。 如果使用/ MD或/ MDd或默认值,它将动态链接到运行时并可能导致麻烦。

更改后,“dumpbin / dependents myfile.exe”不再列出对MSVCRT.DLL的依赖,它应该可以正常工作。