Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 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)