8

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

我遇到的问题是它需要使用的机器正在运行 Windows 98。据我所知,我需要安装可重新分发的 vc++。我可以在 Windows 98 上安装可重新分发的软件,还是有办法让它在 Windows 98 上运行?

4

4 回答 4

7

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

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

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

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

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

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

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

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

于 2011-07-26T15:03:09.503 回答
3

是的,您可以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

于 2011-07-26T14:43:29.477 回答
1

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

于 2011-07-26T14:48:44.237 回答
1

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

于 2011-07-26T14:43:19.963 回答