Всех приветствую.
Стало интересно, возможно ли создать приложение, которое бы запускалось на всех версиях windows начиная с 98 заканчивая 10. И возможен ли в принципе такой диапазон версий.
Базовое приложение созданное в VS Express 2013 не запустилось в XP и 98, что в принципе понятно, потому что, как я понимаю, это приложение использует библиотеки, которых нет в старых версиях windows.
Спрашиваю здесь, потому что даже не знаю, что спросить у поисковых машин.
Здравствуйте, noisebringer, Вы писали:
N>Всех приветствую. N>Стало интересно, возможно ли создать приложение, которое бы запускалось на всех версиях windows начиная с 98 заканчивая 10. И возможен ли в принципе такой диапазон версий. N>Базовое приложение созданное в VS Express 2013 не запустилось в XP и 98, что в принципе понятно, потому что, как я понимаю, это приложение использует библиотеки, которых нет в старых версиях windows.
N>Спрашиваю здесь, потому что даже не знаю, что спросить у поисковых машин.
компилируй компилятором, который поддерживает все эти ОС. VC2005 или может VC2003.
список поддерживаемых ОС есть release notes компилятора
Здравствуйте, noisebringer, Вы писали:
N>Стало интересно, возможно ли создать приложение, которое бы запускалось на всех версиях windows начиная с 98 заканчивая 10.
Использую функциональность библиотек через LoadLibrary/GetProcAddress и будет запускаться хоть на Win95.
Автор Total Commander заявляет, что TC работает начиная с Win95 и заканчивая Win8. Но и в Win10 тоже работает.
Здравствуйте, noisebringer, Вы писали:
N>Всех приветствую. N>Стало интересно, возможно ли создать приложение, которое бы запускалось на всех версиях windows начиная с 98 заканчивая 10. И возможен ли в принципе такой диапазон версий. N>Базовое приложение созданное в VS Express 2013 не запустилось в XP и 98, что в принципе понятно, потому что, как я понимаю, это приложение использует библиотеки, которых нет в старых версиях windows.
Total Commander даже на Win95, вроде, запускается. Правда, он и компилируется в Delphi 2.
А если использовать современные инструменты, то придётся много шаманить.
Здравствуйте, noisebringer, Вы писали:
N>Стало интересно, возможно ли создать приложение, которое бы запускалось на всех версиях windows N>начиная с 98 заканчивая 10. И возможен ли в принципе такой диапазон версий.
Возможно.
Здесь многое зависит от двух вещей:
1) Набор функций системы, которое использует приложение;
2) Версия Visual C/C++ Runtime, с которой это приложение было собрано.
С первым, думаю, все понятно: если приложение статически импортирует какую-нибудь
ChangeWindowMessageFilter, которая появилась только в Windows Vista, то шансов
запуститься на XP, а тем более на Win9x/Win2K, у него нет никаких.
То есть, поддержка разных фич из новых версий Windows решается через механизм
GetVersionEx/LoadLibrary/GetProcAddress.
И у каждой версии Visual C/C++ Runtime тоже есть определенные ограничения.
Например, рантайм от VS2010 работает только начиная с XP SP2 и Server2003Sp1.
Рантайм от VS2008 работает, если не ошибаюсь, начиная с Win2K.
Ну а под Win98 можно писать только в VS2005 или еще более старых версиях VS.
Ну или не использовать рантайм вообще (/NODEFAULTLIB), но в этом случае
придется лишать себя многих удобных возможностей языка.
Чтобы такое приложение выглядело и вело себя адекватно на всех версиях Windows,
ему не помешает манифест с visual styles, trust info, dpiAware и compatibility.
Здравствуйте, noisebringer, Вы писали:
N>Всех приветствую. N>Стало интересно, возможно ли создать приложение, которое бы запускалось на всех версиях windows начиная с 98 заканчивая 10. И возможен ли в принципе такой диапазон версий.
В принципе, 32-разрядное приложение, созданное во времена Windows 95, может заработать в Windows 10, если оно не делает никаких особо "страшных вещей" или если для него есть соответствующая "заплатка совместимости".
VS2005 умеет Windows 98.
Более поздние -- официально нет, но может получится при сборке без рантайма и прочем шаманстве.
Из нюансов:
* Чтобы не были доступны функции из более поздних платформ, задать _WIN32_WINNT и WINVER соответствующими Windows 98. Но тогда неудобно будет использовать их опционально там, где они есть. Но если задать эти макросы выше целевой платформы, то некоторые структуры будут иметь размер, соответствующий более поздним версиям Windows, и не пойдут в старых.
* Чтобы использовать юникодные API, нужно использовать Microsoft Layer for Unicode. Это прослойка, которая для Windows 9x транслирует юникодные вызовы в ANSI. (Альтернатива — не использовать юникодные API, но лучше таки их использовать).
* Могут быть трудности с тем, чтобы раздобыть Windows 98 для тестирования. В загрузках MSDN есть версии начиная с ХР.