Создать для Windows NT 4.0 с помощью Visual Studio 2005?
Приложение MFC, которое я пытаюсь выполнить, использует afxext.h
, что приводит к тому, что _AFXDLL
получает значение set, что вызывает эту ошибку, если я устанавливаю /MT
:
Пожалуйста, используйте переключатель /MD для сборки _AFXDLL
Мое исследование на сегодняшний день указывает на невозможность создания приложения для выполнения в Windows NT 4.0 с использованием Visual Studio (в данном случае С++) в 2005 году.
Это правда? Доступно ли какое-либо обходное решение?
Ответы
Ответ 1
Нет, в VS2005 есть много приложений, которые должны поддерживать Windows XP, 2000, NT, весь стек. Проблема в том, что (по умолчанию) VS2005 хочет использовать библиотеки/экспорт, не присутствующие на NT.
Смотрите этот поток для некоторого фона.
Затем начните ограничивать свои зависимости с помощью макросов препроцессора и избегайте API, которые не поддерживаются в NT.
Ответ 2
Чтобы избавиться от ошибки _AFXDLL, вы пытались перейти к настройкам, чтобы использовать MFC как статическую библиотеку вместо DLL? Это похоже на то, что вы уже делаете при смене исполняемых файлов libs на static вместо DLL.
Ответ 3
Обходной путь - это исправление многопоточной DLL. Простые инструкции. Краткое описание:
Библиотека библиотеки времени выполнения для доставки 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.
Как только у вас есть эти рабочие, придумывание более общего решения должно быть тривиальным.
Ответ 4
Хотя я не знаком с afxext.h, мне интересно, что с этим связано с тем, что он несовместим с Windows NT4....
Однако, чтобы ответить на исходный вопрос:
"Мое исследование на сегодняшний день показывает, что невозможно создать приложение для выполнения в Windows NT 4.0 с использованием Visual Studio (в данном случае С++) в 2005 году".
Ответ должен быть да, особенно если приложение было изначально написано или запущено на NT4! В стороне от afxext.h, это должно быть легко ДА.
Другая проблема, с которой я сталкиваюсь, - это разбросанность природы, в которой люди выбрасывают термин NT. Большинство людей думают о "NT" как о Windows NT4, но все еще неоднозначно, потому что "большинство людей" не равно "всем людям".
В действительности термин "NT" равен серии NT. Серия NT - NT3, NT4, NT5 (2000, XP, 2003) и NT6 (Vista).
Win32 - это подсистема, в которой вы также нацеливаете свой код на C/С++. Поэтому я не вижу причин, по которым нельзя было бы нацеливаться на эту платформу NT4 и подсистему, или, если это упражнение для переноса платформы, удалите зависимости MFC, которые возможно в VC.
Добавление afxext.h в микс, это звучит для меня как проблема совместимости подсистем. Это часть MFC из моего исследования Google. Afxext.h, по-видимому, является расширением MFC (Microsoft Foundation Class).
Можете ли вы удалить свою зависимость от MFC? Что это за приложение? (CLR, сервис, интерфейс GUI?) Можете ли вы преобразовать проект в неуправляемый проект на С++ в VC 8.0?
Надеюсь, некоторые из них помогут вам.
Ответ 5
Идея состоит в том, что exe необходим для ссылки на статическую библиотеку.
Пожалуйста, попробуйте это
"Свойства конфигурации" , "Общие", "Использование MFC" для "Использовать MFC в статической библиотеке",
"Свойства конфигурации" , "Общие", "Использование ATL" на "Статическая ссылка на ATL"
"Свойства конфигурации" , "C\С++", "Генерация кода", "Библиотека времени выполнения" на "Multi-Threaded (\ MT)"
Испытательная платформа
Build Machine: Visual Studio 2005 на Windows XP SP2
Клиентская машина: Windows XP SP2 (не установлен VS2005)