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

Pat*_*ace 8 windows

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

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

这都过去了.我以前成功构建了W98SE可执行文件.不知何故.

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

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

mvp*_*mvp 2

您很可能已将其与更新的运行时库 MSVCRT.DLL 链接。尝试以下操作:

dumpbin /dependents myfile.exe
Run Code Online (Sandbox Code Playgroud)

如果它显示 MSVCRTnn.DLL,那么您就有麻烦了。如果它显示 MSVCRT.DLL(没有数字),那么你应该很好,但仍然要小心。

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

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