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

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

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

这一切都用于工作 。 我过去成功地构build了W98SE可执行文件。 不知何故。

我build立的应用程序失败,“预计更新版本的Windows。升级您的Windows版本”。

我已经使用hex编辑器检查了.exe文件,并且WINVER值(在本例中为十进制偏移量288)是4,因为它应该是。 在正常的版本,即现代Windows版本,WINVER值(在这种情况下是在十进制296十进制)是5.所以WINVER = 4版本可能导致“预计更新的版本”错误被报告?

很可能你已经把它和更新的运行时库MSVCRT.DLL联系起来了。 尝试以下方法

dumpbin /dependents myfile.exe 

如果它显示MSVCRTnn.DLL,你有麻烦。 如果它显示MSVCRT.DLL(没有数字),你应该是好的,但仍然谨慎。

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

改变这个之后,“dumpbin / dependents myfile.exe”应该不再列出MSVCRT.DLL的依赖关系,它应该可以正常工作。