Сведения о вопросе

FromRussia

16:03, 1st July, 2020

Теги

Сборка для Windows NT 4.0 с помощью Visual Studio 2005?

Просмотров: 460   Ответов: 5

Приложение MFC, которое я пытаюсь перенести, использует afxext.h, что приводит к установке _AFXDLL , что вызывает эту ошибку, если я устанавливаю /MT :

Пожалуйста, используйте переключатель /MD для сборки _AFXDLL

Мои исследования на сегодняшний день показывают, что невозможно построить приложение для выполнения на Windows NT 4.0 с помощью Visual Studio (в данном случае C++) 2005.

Неужели это правда? Существуют ли какие-либо обходные пути?



  Сведения об ответе

qwerty101

18:03, 1st July, 2020

Нет, есть много приложений, построенных с VS2005, которые должны поддерживать Windows XP, 2000, NT, весь стек. Проблема в том, что (по умолчанию) VS2005 хочет использовать библиотеки/экспорт, отсутствующие на NT.

Смотрите этот поток для некоторого фона.

Затем начните ограничивать свои зависимости через препроцессор macros и избегать APIs, которые не поддерживаются на NT.


  Сведения об ответе

LIZA

18:03, 1st July, 2020

Чтобы избавиться от ошибки _AFXDLL, вы пробовали изменить настройки, чтобы использовать MFC в качестве статического lib вместо DLL? Это похоже на то, что вы уже делаете, меняя библиотеки среды выполнения на статические вместо DLL.


  Сведения об ответе

DAAA

18:03, 1st July, 2020

Обходным путем является исправление многопоточной DLL. Простая инструкция . Краткое резюме:

Библиотека времени выполнения shipping 8.0 C DLL (MSVCR80.DLL) не поддерживает NT 4.0 SP6 по одной причине и только по одной причине: кто-то в Microsoft добавлена функция вызова GetLongPathNameW , которая не существует в kernel32.dll на NT 4.0.

CRTLIB.C на линии 577 есть звонок на GetLongPathNameW . просто замените его на: ret = 0; используйте только эту сборку MSVCR80.DLL на NT 4.0.

После того, как вы их заработаете, придумывание более общего решения должно быть тривиальным.


  Сведения об ответе

crush

18:03, 1st July, 2020

Хотя я не знаком с afxext.h, мне интересно, что делает его несовместимым с Windows NT4....

Однако, чтобы ответить на первоначальный вопрос: "Мои исследования на сегодняшний день показывают, что невозможно построить приложение для выполнения на Windows NT 4.0 с помощью Visual Studio (в данном случае C++) 2005."

Ответ должен быть да, особенно если приложение было изначально написано или запущено на NT4! Если оставить в стороне afxext.h, то это должно быть легко YES.

Другая вещь, с которой я нахожу проблемы, - это свободная природа, в которой люди выбрасывают термин NT. Конечно, большинство людей думают о 'NT' как о Windows NT4, но это все равно неоднозначно, потому что 'most people' не равно 'all people.'

В действительности термин 'NT' равен ряду NT. Серия NT - это NT3, NT4, NT5 (2000, XP, 2003) и NT6 (Vista).

Win32-это подсистема, на которую вы также нацеливаете свой код C/C++. Поэтому я не вижу причин, по которым нельзя было бы нацелить эту подсистему NT4 platform & или, если это упражнение по переносу платформы, удалить зависимости MFC, которые VC, возможно, навязывает.

Добавление afxext.h в микс, это звучит для меня как проблема совместимости подсистем. Это часть MFC из моего исследования Google. afxext.h, по-видимому, является расширением MFC (Microsoft Foundation Class).

Можете ли вы удалить свою зависимость от MFC? Что это за тип приложения? (CLR, сервис, GUI интерфейс?) Можно ли преобразовать проект в неуправляемый проект C++ в VC 8.0?

Надеюсь, что-то из этого вам поможет.


  Сведения об ответе

screen

18:03, 1st July, 2020

Идея заключается в том, что exe необходимо связать со статической библиотекой.

Пожалуйста, попробуйте это "Свойства конфигурации", "General", "использование MFC" до "Use MFC in a Static Library" "Свойства конфигурации", "General", "использование ATL" до "Static Link to ATL"

"Свойства конфигурации", " C\C++", "генерация кода", "библиотека времени выполнения" до "Multi-Threaded (\MT)"

тестовая платформа Машина сборки: Visual Studio 2005 на Windows XP SP2 Клиентская машина: Windows XP SP2 (не установлен VS2005)


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться