【问题标题】:Can I run an application compiled in Visual Studio 2005 on Windows 98?我可以在 Windows 98 上运行在 Visual Studio 2005 中编译的应用程序吗?
【发布时间】:2011-10-13 11:46:03
【问题描述】:

我在 Microsoft Visual Studio 2005 中构建了一个程序,它运行良好。

我遇到的问题是它需要使用的机器正在运行 Windows 98。据我所知,我需要为 vc++ 安装可再发行版。我可以在 Windows 98 上安装可再发行软件吗?或者有没有办法让它在 Windows 98 上运行?

【问题讨论】:

  • 对您必须使用 windows 98 表示诚挚的哀悼 :)
  • 您必须安装可再发行组件,是的。如果它有效,它就有效。如果没有,MS 会告诉你它不受支持。
  • 到目前为止,所有其他答案都忽略了几个重要细节。它们又短又甜,乍一看似乎很好,但它们不会让你走得太远。故事不仅仅是安装可再发行组件。 Windows 9x 平台是一个非常不同于我们现在都知道和喜爱的 NT 平台的野兽。我试图在我的回答中解释尽可能多的可能的障碍和解决方案,但如果您遇到任何我没有讨论过的问题,请告诉我。

标签: c++ visual-c++ visual-studio-2005 windows-98


【解决方案1】:

是的,使用 VS 2005 编译的应用程序在 Windows 98 和 Me 上运行良好。我自己运行了其中的几个,并为此目的保留并安装了 VS 2005。早在 Windows 98 中就支持 Version 2005 of the CRT redistributable

诀窍在于您必须针对多字节字符集 (MBCS) 编译应用程序。当编译为 Unicode(这是默认项目设置)时,它将不起作用。如果没有一些额外的帮助,Windows 9x 平台不支持 Unicode。您应该能够更改项目设置并且没问题,但是如果您编写的代码假定为 Unicode,那么您将遇到问题。

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

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

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

如果您希望调用 Windows 98 中不存在的函数,而这些函数在它们可用的较新系统上运行时,则需要格外小心地调用它们动态地,而不是将它们添加到应用程序的 DLL 导入表中(链接器通常会自动为您执行这些操作)。这意味着您自己定义函数指针,并使用LoadLibraryGetProcAddress 函数来调用它们。这不好玩,但它确实有效。

或者,您可以将链接器配置为“延迟加载”库(检查项目的属性)。这更方便,但显然您需要确保调用目标操作系统上可用的函数,否则应用程序将崩溃。

无论哪种方式,GetVersionEx function 都会告诉您需要了解的有关当前主机操作系统的所有信息,以便您的代码可以采用不同的路径(如果可用,则调用较新的函数,如果不可用,则回退到较旧的函数)取决于关于环境。这允许您在新系统上支持新功能,同时仍保留对旧操作系统的适当支持程度。如果正确完成,您会在代码库中找到很多 if 语句。 :-)

【讨论】:

  • 2015 年未来的附录 - 如果您使用 KernelEx,您可以在 98SE 上运行更新的软件,并且即使在 VS2005 等现代开发软件中也可以避免很多兼容性陷阱,如果不只是运行现有软件彻底(如果它是为 XP 开发的 - 如果它需要比这更新的版本,那么您的机会就会减少)。
【解决方案2】:

是的,您可以http://www.microsoft.com/download/en/details.aspx?id=3387(Microsoft Visual C++ 2005 Redistributable Package (x86))

支持的操作系统:Windows 2000 Service Pack 3、Windows 98、Windows 98 Second Edition、Windows ME、Windows Server 2003、Windows XP Service Pack 2

【讨论】:

    【解决方案3】:

    您检查过系统要求吗?根据this link,Windows 98 应该没问题。

    【讨论】:

      【解决方案4】:

      不仅仅是随您的应用程序分发 CRT。您在程序中使用的所有功能必须在 Windows98 中可用。对于您在 MSDN 上找到的所有功能,您都会找到“最小支持的客户端”。这很棘手......
      要解决 CRT 问题,您可以静态链接应用程序(/MT 链接器选项)。会产生更大的二进制文件,但会起作用。

      【讨论】:

      • 该信息不再准确。 “最低支持客户端”是指微软仍然支持的最低客户端操作系统,而不是支持相关函数调用的最低限度。许多函数存在于 Windows 98 上,调用没有问题。但他们将 Windows 2000 列为最低支持客户端,因为 Microsoft 不再支持 Windows 98。您需要获取旧版本的 MSDN 文档才能获得有关旧操作系统支持的准确信息。他的 VS 2005 安装附带的 MSDN 帮助可以正常工作。
      猜你喜欢
      • 1970-01-01
      • 2013-06-04
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 2017-05-09
      相关资源
      最近更新 更多