我已经在Microsoft Visual Studio 2005中构建了一个程序,并且它可以正常运行。
我的问题是需要在运行Windows 98的机器上使用。据我所知,我需要安装vc++的可再分发包才能实现。我是否可以在Windows 98上安装可再分发包,或者有没有办法使其在Windows 98上工作?
我已经在Microsoft Visual Studio 2005中构建了一个程序,并且它可以正常运行。
我的问题是需要在运行Windows 98的机器上使用。据我所知,我需要安装vc++的可再分发包才能实现。我是否可以在Windows 98上安装可再分发包,或者有没有办法使其在Windows 98上工作?
是的,使用VS 2005编译的应用程序在Windows 98和Me上完美运行。我自己运行了几个应用程序,并保留并安装了VS 2005,就是为了这个目的。CRT redistributable版本2005支持Windows 98。
关键在于必须为多字节字符集(MBCS)编译应用程序。当编译为Unicode时,它将无法工作,而Unicode是默认项目设置。 Windows 9x平台不支持Unicode,除非进行一些额外的帮助。您应该能够更改项目设置并正常工作,但如果您编写代码以假定Unicode,则会遇到问题。
这就是为什么您需要使用tchar.h
中定义的通用字符类型和函数,而不是Unicode构建中首选的宽字符等效项。始终使用TCHAR
类型(或LPTSTR
或LPCTSTR
类型)定义字符串,其有条件地定义为wchar_t
或char
。使用以_tcs...
开头的字符串操作函数,而不是特定于宽或窄字符的函数。确保调用函数时,始终调用通用typedef版本,而不是以A
或W
后缀结尾的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导入表中(链接器通常会自动完成此操作)。这意味着你需要自己定义函数指针,并使用LoadLibrary
和GetProcAddress
函数来调用它们。虽然有点麻烦,但它确实可行。GetVersionEx
函数都将告诉你有关当前主机操作系统的所有信息,以便你的代码可以根据环境采用不同的路径(如果可用则调用较新的函数,否则回退到较旧的函数)。这样可以在新系统上支持新功能,同时仍保留对遗留操作系统的适当支持。当正确执行时,代码库中会出现许多if
语句。 :-)是的,你可以下载并安装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 操作系统)。
在应用程序中分发CRT不仅仅是这样。您在程序中使用的所有函数都必须在Windows98中可用。对于MSDN上找到的所有函数,您都会找到一个“最低支持客户端”。这很棘手...
为了解决CRT问题,您可以静态链接应用程序(/MT链接器选项)。这将导致更大的二进制文件,但可以正常工作。