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

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

Please use the /MD switch for _AFXDLL builds

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

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

Кто-нибудь, пожалуйста, защитите это.

Jonathan Mee 04.02.2015 17:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
21
1
3 884
5

Ответы 5

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

См. Справочную информацию в эта ветка.

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

Эта проблема сбивает с толку то, что при статической ссылке на самом деле втягиваются только объектные файлы, необходимые для используемых вами символов, поэтому в большинстве случаев это работает на NT4.

Yuhong Bao 13.05.2012 08:49

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

Хотя я не знаком с 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?

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

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

The shipping 8.0 C Runtime Library DLL (MSVCR80.DLL) does not support NT 4.0 SP6 for one reason and one reason only: someone at Microsoft added a function call to GetLongPathNameW which does not exist in kernel32.dll on NT 4.0.

CRTLIB.C On line 577, there is a call to GetLongPathNameW. simply replace it with: ret = 0; only use this build of MSVCR80.DLL on NT 4.0.

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

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

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

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

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

Другие вопросы по теме