8

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

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

nb这一切都过去了。我过去成功地构建了 W98SE 可执行文件。不知何故。

我构建的应用程序失败并显示“需要更新版本的 Windows。升级您的 Windows 版本”。

我用十六进制编辑器检查了 .exe 文件,WINVER 值(在本例中为十进制偏移 288)是 4,应该是。在正常构建中,即对于现代 Windows 版本,WINVER 值(在本例中为十进制偏移 296)为 5。那么 WINVER=4 版本如何导致“期望更新版本”错误被举报?

4

1 回答 1

2

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

dumpbin /dependents myfile.exe

如果它显示 MSVCRTnn.DLL,你就有麻烦了。如果它显示 MSVCRT.DLL(没有数字),你应该很好,但仍需谨慎。

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

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

于 2012-10-17T07:37:19.150 回答