Можно ли запустить приложение, скомпилированное в Visual Studio 2005 в Windows 98?
Я построил программу в Microsoft Visual Studio 2005, и она отлично работает.
Проблема, с которой я сталкиваюсь, заключается в том, что машина, на которой нужно работать, работает под управлением Windows 98. Насколько я могу судить, мне нужно установить распространяемый дистрибутив для vC++. Могу ли я установить распространяемый пакет на Windows 98 или есть способ заставить его работать на Windows 98?
4 ответа
Да, приложения, скомпилированные с 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 for Unicode в системах Windows 95/98/ME, который предоставляет уровень абстракции, который позволяет вам вызывать функции Unicode в устаревших операционных системах Windows 9x, где они не поддерживаются изначально.
Помимо Unicode/MBCS, единственное, на что нужно обратить внимание, это то, что вы не вызываете функции, которые не существовали в API Win32, еще в дни Windows 98. Вы больше не можете доверять тому, что в онлайн-документации MSDN говорится о "минимальной поддерживаемой версии клиента", поскольку Microsoft больше не поддерживает Windows 98. Все документы SDK говорят, что минимальная поддерживаемая версия - это Windows 2000, и вы знаете, это не правильно. Весь API не был представлен еще в W2K. Чтобы получить точную информацию, вам необходимо получить старую версию документации SDK; что пришло с вашей установкой VS 2005 должно быть в порядке. Информация там восходит, по крайней мере, к Win 98, если не к 95 (точно не помню).
В тех случаях, когда вы хотите вызывать функции, которых еще не было в Windows 98, когда вы работаете на более новых системах, где они доступны, вам нужно быть особенно осторожными, чтобы вызывать их динамически, а не добавлять их в приложение. Таблица импорта DLL (что компоновщик обычно делает для вас автоматически). Это означает, что вы должны сами определять указатели функций и использовать LoadLibrary
а также GetProcAddress
функции для их вызова. Это не весело, но это работает.
Кроме того, вы можете настроить компоновщик так, чтобы он "задерживал загрузку" библиотек (проверьте свойства вашего проекта). Это намного удобнее, но, очевидно, вам нужно будет убедиться, что вы вызываете только те функции, которые доступны в вашей целевой операционной системе, в противном случае приложение завершится сбоем.
В любом случае, GetVersionEx
Функция расскажет вам все, что вам нужно знать о текущей операционной системе хоста, чтобы ваш код мог идти по разным путям (вызывая новые функции, если они доступны, или возвращаясь к более старым, если нет), в зависимости от среды. Это позволяет поддерживать новые функции в новых системах, сохраняя при этом любую степень поддержки устаревших операционных систем. Вы найдете много if
операторы в базе кода, когда это сделано правильно.:-)
Да, вы можете http://www.microsoft.com/download/en/details.aspx?id=3387 (распространяемый пакет Microsoft Visual C++ 2005 (x86))
Поддерживаемые операционные системы: Windows 2000 с пакетом обновления 3, Windows 98, Windows 98 второго издания, Windows ME, Windows Server 2003, Windows XP с пакетом обновления 2
Это больше, чем распространение CRT с вашим приложением. Все функции, которые вы используете в программе, должны быть доступны в Windows98. Для всех функций, которые вы найдете в MSDN, вы найдете "Минимально поддерживаемый клиент". Это сложно...
Чтобы преодолеть проблему CRT, вы можете статически связать приложение (опция /MT linker). Результатом будет бинарный файл большего размера, но он будет работать.
Вы проверили системные требования? По этой ссылке Windows 98 должна быть в порядке.