我可以在Windows 98上运行Visual Studio 2005中编译的应用程序吗?

时间:2011-07-26 14:37:13

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

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

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

4 个答案:

答案 0 :(得分:6)

是的,使用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...开头的字符串操作函数,而不是特定于宽字符或窄字符的函数。确保在调用函数时,始终调用泛型类型定义版本,而不是以AW后缀结尾的ANSI或特定宽泛版本。

如果你从一开始就没有这样做,那么回过头来解决这个问题可能需要做很多工作。如果是这种情况,您可以查看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语句。 : - )

答案 1 :(得分: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

答案 2 :(得分:1)

您是否检查过系统要求?根据{{​​3}},Windows 98应该没问题。

答案 3 :(得分:1)

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