Могу ли я запустить приложение, собранное в Visual Studio 2005 на Windows 98?

StackOverflow https://stackoverflow.com/questions/6831756

Вопрос

Я создал программу в Microsoft Visual Studio 2005, и она работает нормально.

Проблема, с которой у меня возникает машина,-это машина, на которой он должен использовать, заключается в запуске Windows 98. Насколько я могу судить, мне нужно установить повторное распределение для VC ++. Могу ли я установить повторное распределение в Windows 98 или есть способ заставить его работать на Windows 98?

Это было полезно?

Решение

Да, приложения, составленные с VS 2005, работают отлично в Windows 98 и Me. Я сам запустил несколько из них, и держу в 2005 году и устанавливал именно для этой цели. Версия 2005 от перераспределения CRT поддерживается еще в Windows 98.

Хитрость в том, что Вы должны скомпилировать приложение для мульти-байтового набора символов (MBCS). Анкет Он не будет работать при составлении как Unicode, который является настройкой проекта по умолчанию. Платформы Windows 9x не поддерживают Unicode без дополнительной помощи. Вы должны быть в состоянии изменить настройки проекта и быть в порядке, но если вы написали свой код, чтобы предположить Unicode, у вас возникнет проблема.

Вот почему вам нужно использовать общие типы символов и функции, определенные в tchar.h, а не их широкие эквиваленты характера, которые предпочтительны для сборки Unicode. Всегда определяйте строки, используя TCHAR Тип (или LPTSTR или же LPCTSTR Типы), которые условно определяются wchar_t или же char, в зависимости от необходимости. Используйте функции манипуляции строк, которые начинаются с _tcs..., а не те, специфичные для широких или узких символов. Убедитесь, что при вызове функций вы всегда называете общие версии Typedef'ed, а не 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 говорят, что минимальная поддерживаемая версия теперь 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 Service Pack 3, Windows 98, Windows 98 Second Edition, Windows ME, Windows Server 2003, Windows XP Service Pack 2

Вы проверяли системные требования? Согласно с эта ссылка, Windows 98 должно быть в порядке.

Есть больше, чем распределение CRT с вашим приложением. Все функции, которые вы используете в программе, должны быть доступны в Windows98. Для всех функций, которые вы найдете на MSDN, вы найдете «минимальный клиент -поддерживаемый». Это сложно ...
Чтобы преодолеть проблему CRT, вы можете статически связать приложение (/MT Linker Option). Приведет к большему бинарному файлу, но будет работать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top