我能否在Windows 98上运行在Visual Studio 2005编译的应用程序?

8

我已经在Microsoft Visual Studio 2005中构建了一个程序,并且它可以正常运行。

我的问题是需要在运行Windows 98的机器上使用。据我所知,我需要安装vc++的可再分发包才能实现。我是否可以在Windows 98上安装可再分发包,或者有没有办法使其在Windows 98上工作?


2
我真诚地向你表示慰问,因为你不得不使用Windows 98 :) - Armen Tsirunyan
1
你必须安装可再发行组件。如果它能正常工作,那就好了。如果不能,微软会告诉你它不受支持。 - Bo Persson
1
到目前为止,所有其他答案都省略了几个重要细节。它们简短而简洁,乍一看似乎很好,但是它们不会让你走得太远。故事并不仅仅是安装可再分发组件。Windows 9x平台与我们现在所熟知和喜爱的NT平台非常不同。我已经尝试在我的答案中解释可能出现的问题和解决方案,但如果您遇到我没有讨论的任何问题,请告诉我。 - Cody Gray
4个回答

8

是的,使用VS 2005编译的应用程序在Windows 98和Me上完美运行。我自己运行了几个应用程序,并保留并安装了VS 2005,就是为了这个目的。CRT redistributable版本2005支持Windows 98。

关键在于必须为多字节字符集(MBCS)编译应用程序。当编译为Unicode时,它将无法工作,而Unicode是默认项目设置。 Windows 9x平台不支持Unicode,除非进行一些额外的帮助。您应该能够更改项目设置并正常工作,但如果您编写代码以假定Unicode,则会遇到问题。

这就是为什么您需要使用tchar.h中定义的通用字符类型和函数,而不是Unicode构建中首选的宽字符等效项。始终使用TCHAR类型(或LPTSTRLPCTSTR类型)定义字符串,其有条件地定义为wchar_tchar。使用以_tcs...开头的字符串操作函数,而不是特定于宽或窄字符的函数。确保调用函数时,始终调用通用typedef版本,而不是以AW后缀结尾的ANSI或宽特定版本。

如果您从一开始就没有这样做,那么回去修复这个问题可能需要很多工作。如果是这种情况,您可以看看Windows 95/98/ME系统上的Microsoft Unicode层,它提供了一个抽象层,允许您在不支持Unicode的旧版Windows 9x操作系统上调用Unicode函数。

除了Unicode / MBCS之外,唯一需要注意的是您是否调用了在Windows 98时代不存在的任何函数。您不能再相信在线MSDN文档告诉您“最低支持客户端版本”的信息,因为Microsoft不再支持Windows 98。所有SDK文档都说最低支持版本现在是Windows 2000,而您知道这是不正确的。整个API并不是在W2K之后引入的。为了获得准确的信息,您需要获取旧版本的SDK文档;随VS 2005安装的内容应该没问题。那里的信息至少可以追溯到Win 98,如果不是95(我记不清了)。

在需要调用在Windows 98中不存在但在更高版本系统中存在的函数时,你需要特别小心地进行动态调用,而不是将它们添加到应用程序的DLL导入表中(链接器通常会自动完成此操作)。这意味着你需要自己定义函数指针,并使用LoadLibraryGetProcAddress函数来调用它们。虽然有点麻烦,但它确实可行。
或者,你可以配置链接器以“延迟加载”库(检查项目属性)。这更加方便,但显然你需要确保只调用目标操作系统上可用的函数,否则应用程序会崩溃。
无论哪种方式,GetVersionEx函数都将告诉你有关当前主机操作系统的所有信息,以便你的代码可以根据环境采用不同的路径(如果可用则调用较新的函数,否则回退到较旧的函数)。这样可以在新系统上支持新功能,同时仍保留对遗留操作系统的适当支持。当正确执行时,代码库中会出现许多if语句。 :-)

来自2015年未来的补充说明 - 如果您使用KernelEx,您可以在98SE上运行更新的软件,并避免许多兼容性陷阱,即使是像VS2005这样的现代开发软件,如果不是直接运行现有的软件(如果它是为XP开发的 - 如果需要更新的话,您的机会会减少)。 - Yushatak

3

1

你有检查系统要求吗?根据这个链接,Windows 98应该没问题。


1

在应用程序中分发CRT不仅仅是这样。您在程序中使用的所有函数都必须在Windows98中可用。对于MSDN上找到的所有函数,您都会找到一个“最低支持客户端”。这很棘手...
为了解决CRT问题,您可以静态链接应用程序(/MT链接器选项)。这将导致更大的二进制文件,但可以正常工作。


1
那些信息已经不再准确了。在“最低支持客户端”中,他们指的是微软仍然支持的最低客户端操作系统,而不是支持所涉及的函数调用的最低操作系统。很多函数存在于Windows 98上,并且可以无问题地调用。但是因为微软不再支持Windows 98,他们将Windows 2000列为最低支持的客户端。您需要获取旧版本的MSDN文档以获取有关遗留操作系统支持的准确信息。与VS 2005安装一起提供的MSDN帮助将能够正常使用。 - Cody Gray

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