Да, приложения, скомпилированные с VS 2005, прекрасно работают на Windows 98 и Me.Я сам запустил несколько из них, и держу VS 2005 рядом и установлен именно для этой цели. Версия 2005 распространяемого CRT поддерживается еще в Windows 98.
Хитрость в том, что вы должны скомпилировать приложение для многобайтового набора символов (MBCS) .Он не будет работать при компиляции в Unicode, который является настройкой проекта по умолчанию.Платформы Windows 9x не поддерживают Unicode без дополнительной помощи.Вы должны быть в состоянии изменить настройки проекта и все будет в порядке, но если вы написали свой код для поддержки Unicode, у вас возникнет проблема.
Вот почему вам нужно использовать универсальные типы символов ифункции, определенные в tchar.h
, а не их широкие символьные эквиваленты, которые являются предпочтительными для сборок Unicode.Всегда определяйте строки, используя тип TCHAR
(или типы LPTSTR
или LPCTSTR
), который условно определяется как wchar_t
или char
, в зависимости от ситуации.Используйте функции манипуляции со строками, которые начинаются с _tcs...
, а не те, которые характерны для широких или узких символов.Убедитесь, что при вызове функций вы всегда вызываете общие версии с определением типа, а не ANSI- или широкие версии, заканчивающиеся суффиксом A
или W
.
Это можетбудет много работы, чтобы вернуться и исправить это, если вы не сделали этого с самого начала.Если это так, вы можете взглянуть на Microsoft Layer для Unicode в Windows 95/98 / ME Systems , который предоставляет уровень абстракции, который позволяет вам вызывать функции Unicode в устаревших операционных системах Windows 9x, где ониизначально не поддерживаются.
Помимо Unicode / MBCS, единственное, на что нужно обратить внимание, это то, что вы не вызываете функции, которые не существовали в API Win32 еще в Windows 98 дней.Вы больше не можете доверять тому, что в онлайн-документации MSDN говорится о «минимально поддерживаемой версии клиента», поскольку Microsoft больше не поддерживает Windows 98. Все из документов SDK говорят, что минимальная поддерживаемая версия - Windows2000, и вы знаете, что это не правильно.Весь API не был представлен еще в W2K.Чтобы получить точную информацию, вам необходимо получить старую версию документации SDK;что пришло с вашей установкой VS 2005 должно быть в порядке.Информация там восходит, по крайней мере, к Win 98, если не к 95 (точно не помню).
Для случаев, когда вы хотите вызывать функции, которых не было в Windows 98, когда выЕсли вы работаете в более новых системах, где они доступны , вам нужно будет позаботиться о том, чтобы вызывать их динамически , а не добавлять их в таблицу импорта DLL вашего приложения (что такое компоновщик)как правило, делает для вас автоматически).Это означает, что вы должны сами определять указатели на функции и использовать для их вызова функции LoadLibrary
и GetProcAddress
.Это не весело, но работает .
В качестве альтернативы, вы можете настроить компоновщик так, чтобы он "задерживал загрузку" библиотек (проверьте свойства вашего проекта).Это гораздо удобнее, но, очевидно, вам нужно убедиться, что вы только вызываете функции, доступные в целевой операционной системе, в противном случае приложение завершится сбоем.
В любом случае, функция GetVersionEx
расскажет вам все, что вам нужно знать о текущей операционной системе хоста, чтобы ваш код мог идти по разным путям (вызывая новые функции, если они доступны,или вернуться к старым, если нет) в зависимости от окружающей среды.Это позволяет поддерживать новые функции в новых системах, сохраняя при этом любую степень поддержки устаревших операционных систем.Когда вы все сделаете правильно, вы найдете много if
операторов в базе кода.: -)