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

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

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

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

Это правда? Есть ли обходной путь?

Ответов (5)

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

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

См. Эту ветку для некоторой предыстории.

Затем начните ограничивать свои зависимости с помощью макросов препроцессора и избегать API-интерфейсов, которые не поддерживаются в NT.

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

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

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

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

На самом деле термин «NT» эквивалентен серии NT. Серии NT - это NT3, NT4, NT5 (2000, XP, 2003) и NT6 (Vista).

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

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

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

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

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

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

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

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

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

Пожалуйста, попробуйте эти «Свойства конфигурации», «Общие», «Использование MFC», чтобы «Использовать MFC в статической библиотеке», «Свойства конфигурации», «Общие», «Использование ATL» для «Статическая ссылка на ATL»

«Свойства конфигурации», «C \ C++», «Генерация кода», «Библиотека времени выполнения» на «Многопоточность (\ MT)»

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