【问题标题】:C++ program compatible with Windows 95与 Windows 95 兼容的 C++ 程序
【发布时间】:2021-11-13 05:17:10
【问题描述】:

我错误地认为我用 VS 2012 编写的 C++ 程序可以在运行 Windows 95 的计算机上运行。

现在我知道为什么它不起作用了。于是我看了看其他免费的编译器,比如Dev-C++ 5,但是在浏览了Dev-C++网站的论坛后,似乎也不能用来制作兼容Windows 95的应用程序。

所以我的问题是,我应该使用什么来编译我的 C++ 应用程序以使其在 Windows 95 和从 95 到 8 的所有其他版本的 Windows 上工作?

编辑:在没有合适的答案之后。

我不介意为不同的 Windows 版本构建不同的 .exe。

编辑:问题解决了!

感谢所有在此讨论中提供帮助的人。

使用 MingW 和代码块,我只用了 20 分钟就将代码适应 Win 95 友好的库...并用一整天的时间在 VM 中安装 Win 95,哈哈。

【问题讨论】:

  • VS 2012 应该工作,你只需要指定正确的运行时库版本......
  • @SimonCorcos 这不是正确的开关。
  • 在 MSDN 网站上很清楚,VS 2012 中的任何应用程序都无法在 Windows 95 上运行
  • mingw builds here 声明:It can create 32-bit OR 64-bit binaries, for any version of Windows since Windows 95.。不过,在 xp 之前,我从来没有瞄准过任何东西。
  • @Josh:我在一家道路建设公司工作。他们拥有沥青厂,可以生成有关其日常生产的数据。控制这些工厂的计算机有时非常老旧(其中一台仍在运行 DOS)。我的 C++ 程序从 USB 驱动器中提取数据并将其发送到更现代的机器上,另一个程序在该机器上编译数据并处理数据

标签: c++ visual-studio compiler-construction visual-studio-2012 windows-95


【解决方案1】:

首先,为什么是Windows 95?好吧,无论如何,您可以为此使用 MinGW。 Code::Blocks 是我最喜欢的带有 MinGW 的 IDE。可以从here下载。

【讨论】:

  • 这已经在 cmets 中提出了建议。我现在正在虚拟机上安装 Windows 95 来测试代码。至于为什么它也在 cmets 中。
  • @SimonCorcos 哦,我没有阅读 cmets。无论如何,祝你好运:)
【解决方案2】:

您需要 Visual C++ 2005 Express 或 Pro!这是支持 95/98/ME 的最后一个版本。任何较新的版本都将编译强制限制在 Windows XP-SP2 或以上平台的可执行文件。

您还必须注意您调用的 WinAPI,因为在 95 中可用的 WinAPI 较少,因此您需要使用 MSDN 库检查您使用的所有内容,看看它是否是从第一天就可用的原始 API(例如 CreateFileA、ReadFile、CloseFile 等)。我想如果你用 ANSI“C”编码并使用基本的东西你会没事的,但这取决于。

仅供参考,补充 2005 Visual Studio 安装的最后一个 MSDN 库是“Microsoft Visual Studio 2005(2007 年 4 月版)”——如果你看的话,你可以找到一个 ISO,而且 Express 总是免费的,只是受限于排除完整的图形资源编辑器和其他东西。

【讨论】:

  • VC2005 无法正确定位 Windows 95,您需要 2003。如果您尝试使用 2005,充其量只会在启动时无法找到 IsDebuggerPresent(),也许更多。
  • 嗯,从来没有问题。你必须小心你的 Win32 API 使用,确保每一个都是在 Win95 中引入的。任何比 VC++ 2005 更新的东西肯定会编译阻止其执行的 EXE 标头设置。另外,可能是我在编译我学到的 EXE 时使用了自己的轻量级 CRT 引擎。刚刚检查了MS API Docs,是的,在Win98中引入了IsDebuggerPresent(),你必须阻止它被隐式编译/链接!这通常用于在电子游戏中使用调试器阻止 EXE 篡改/破解。
  • 另一个技巧是使用 LoadLibraryA/GetProcAddress 获取更新的 API 函数以避免隐式链接,如果您真的想保持 EXE/应用程序向后兼容。因此,根据您的描述,使用了太多内置函数,并且在某些时候,像 IsDebuggerPresent() 这样的函数在没有用户控制的情况下被隐式链接。您必须找出实际需要的 C 函数并在可能的情况下替换它。
猜你喜欢
  • 2018-04-23
  • 2013-06-25
  • 2017-11-04
  • 2013-10-04
  • 1970-01-01
  • 2011-10-13
  • 2016-03-06
  • 1970-01-01
相关资源
最近更新 更多