【问题标题】:Why won't my WINVER 4 .exe run under W98SE?为什么我的 WINVER 4 .exe 不能在 W98SE 下运行?
【发布时间】:2012-10-03 20:38:33
【问题描述】:

我需要为运行 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 版本如何导致“期望更新版本”错误被举报?

【问题讨论】:

  • 天哪。我分担你的痛苦!你检查过 _WIN32_WINDOWS 变量了吗?这篇文章可能会有所帮助:forums.codeguru.com/…
  • 我想知道 Visual Studio 更新之一是否使它失去了针对 Win98 的能力? IIRC,运行时库至少有一次更新。如果您仍有媒体,则可能值得尝试在隔离的虚拟机上全新安装 VS2005。

标签: windows


【解决方案1】:

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

dumpbin /dependents myfile.exe

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    相关资源
    最近更新 更多