Можно ли запустить приложение, скомпилированное в Visual Studio 2005 в Windows 98? - PullRequest
7 голосов
/ 26 июля 2011

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

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

Ответы [ 4 ]

6 голосов
/ 26 июля 2011

Да, приложения, скомпилированные с 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 операторов в базе кода.: -)

3 голосов
/ 26 июля 2011

Да, вы можете 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 с пакетом обновления 2

1 голос
/ 26 июля 2011

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

1 голос
/ 26 июля 2011

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

...