兼容Windows 95的C++程序

7
我犯了一个错误,认为我在VS 2012上编写的C++程序可以在Windows 95上运行。现在我知道为什么它不能工作了。我查看了其他免费编译器,比如Dev-C++ 5,但是在浏览Dev-C++网站的论坛后,看起来它也不能用于制作与Windows 95兼容的应用程序。所以我的问题是,我该使用什么来编译我的C++应用程序,以便它能够在Windows 95和从95到8的所有其他Windows版本上运行?编辑:没有合适的答案之后,我无所谓需要为不同的Windows版本构建不同的.exe文件。编辑:问题解决了!感谢所有在此讨论中提供帮助的人。使用MingW和代码块,只要20分钟就可以将代码调整为Win 95友好的库……还有一整天时间安装Win 95在虚拟机里哈哈。

4
VS 2012 应该可以使用,您只需要指定正确的运行时库版本即可。 - Konrad Rudolph
1
@SimonCorcos 那不是正确的开关。 - Konrad Rudolph
3
根据MSDN网站的说明,VS 2012的任何应用程序都无法在Windows 95上运行。 - Simon Corcos
3
这里的Mingw构建声称:它可以创建32位或64位二进制文件,适用于自Windows 95以来的任何Windows版本。但我之前从未针对过xp。 - Jesse Good
4
@Josh:我在一家道路建设公司工作。他们拥有沥青搅拌站,这些搅拌站产生每日生产数据。控制这些搅拌站的计算机有时非常老旧(其中一个仍在运行DOS)。我的C ++程序从USB驱动器中提取数据,并将其发送到另一台更现代的计算机上,那里有另一个程序编译数据并对其进行处理。 - Simon Corcos
显示剩余11条评论
3个回答

3

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


这个建议已经在评论中提出了。我现在正在虚拟机上安装Windows 95来测试代码。至于为什么,也在评论中解释了。 - Simon Corcos
@SimonCorcos 哦,我没有看评论。无论如何,祝你好运 :) - Shravan

2
你需要使用Visual C++ 2005 Express或Pro版本!这是最后一个支持95/98/ME的版本。任何更新的版本都会强制编译可执行文件,仅限于Windows XP-SP2或以上平台。
你还要注意调用的WinAPIs,因为在95中可用的APIs较少,所以您需要检查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(),甚至可能会出现更多问题。 - bparker
嗯,我从来没有遇到过这个问题。你必须小心使用Win32 API,确保每个API都是在Win95中引入的。比VC++ 2005更新的任何版本肯定会编译EXE头文件设置,以防止其执行。此外,当我编译我的EXE时,可能会使用我自己学习的轻量级CRT引擎。刚刚查看了MS API文档,是的,IsDebuggerPresent()是在Win98中引入的,你必须停止它被隐式编译/链接!这通常用于防止在视频游戏中使用调试器进行EXE篡改/破解。 - John Doe
另一个提示是,如果您真的想保持EXE /应用程序向后兼容,则使用LoadLibraryA / GetProcAddress来使用较新的API函数以避免隐式链接。因此,根据您的描述,使用了太多内置函数,并且在某些时候,像IsDebuggerPresent()这样的函数会在用户控制之外被隐式链接。您需要找出实际上需要该函数的C函数是什么,并尽可能替换它。 - John Doe

0
下载并安装Pelles C v12。摆脱运行时依赖和不兼容性的束缚。只需注意你所调用的API和支持该API的Windows版本即可。我绝对不会为此咨询Visual Studio,哈哈。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接