Построить для Windows NT 4.0 с помощью Visual Studio 2005?

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

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

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

Это правда? Доступны ли какие-либо обходные пути?


person Isaac Moses    schedule 03.08.2008    source источник
comment
Кто-нибудь, пожалуйста, защитите это.   -  person Jonathan Mee    schedule 04.02.2015


Ответы (5)


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

См. эту тему для некоторых задний план.

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

person Community    schedule 03.08.2008
comment
Что делает эту проблему запутанной, так это то, что при статической ссылке фактически загружаются только объектные файлы, необходимые для используемых вами символов, поэтому в большинстве случаев это работает на NT4. - person Yuhong Bao; 13.05.2012

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

person Adam Mitz    schedule 23.08.2008

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

Поставляемая 8.0 C Runtime Library 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.

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

person MSalters    schedule 14.10.2008

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

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

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

Еще одна вещь, с которой я сталкиваюсь, это свободная природа, в которой люди выбрасывают термин NT. Конечно, большинство людей думают о «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?

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

person Eric    schedule 18.09.2008

Идея в том, что exe нужен для ссылки на статическую библиотеку.

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

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

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

person Community    schedule 20.11.2008