Сборка для Windows NT 4.0 с использованием Visual Studio 2005?
Приложение MFC, которое я пытаюсь перенести, использует afxext.h
, что приводит к _AFXDLL
чтобы получить набор, который вызывает эту ошибку, если я установил /MT
:
Пожалуйста, используйте ключ /MD для сборки _AFXDLL
Мои исследования на сегодняшний день показывают, что невозможно создать приложение для выполнения в Windows NT 4.0 с использованием Visual Studio (в данном случае C++) 2005.
Это правда? Есть ли обходной путь?
5 ответов
Нет, есть много приложений, созданных с VS2005, которые должны поддерживать Windows XP, 2000, NT, весь стек. Проблема в том, что (по умолчанию) VS2005 хочет использовать библиотеки / экспорты, которых нет в NT.
Смотрите эту тему для некоторого фона.
Затем начните ограничивать свои зависимости с помощью макросов препроцессора и избегайте API, которые не поддерживаются в NT.
Чтобы избавиться от ошибки _AFXDLL, вы пытались изменить настройки, чтобы использовать MFC в качестве статической библиотеки вместо библиотеки DLL? Это похоже на то, что вы уже делаете, меняя библиотеки времени выполнения на static вместо DLL.
Обходной путь должен исправить многопоточную 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.
Как только вы поработаете, придумать более общее решение должно быть тривиально.
Хотя я не знаком с 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, сервис, интерфейс GUI?) Можете ли вы преобразовать проект в неуправляемый проект C++ в VC 8.0?
Надеюсь, что это поможет вам в этом.
Идея в том, что exe-файл необходим для связи со статической библиотекой.
Попробуйте использовать "Свойства конфигурации", "Общие", "Использование MFC", чтобы "Использовать MFC в статической библиотеке", "Свойства конфигурации", "Общие", "Использование ATL" и "Статическая ссылка на ATL".
"Свойства конфигурации", "C\C++", "Генерация кода", "Библиотека времени выполнения" в "Многопоточный (\MT)"
Машина для сборки тестовой платформы: Visual Studio 2005 на клиентском компьютере с Windows XP SP2: Windows XP с пакетом обновления 2 (VS2005 не установлен)