Сборка для Windows NT 4.0 с использованием Visual Studio 2005? - PullRequest
17 голосов
/ 03 августа 2008

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

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

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

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

Ответы [ 5 ]

8 голосов
/ 03 августа 2008

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

См. в этой теме , чтобы узнать о некотором фоне.

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

4 голосов
/ 23 августа 2008

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

3 голосов
/ 14 октября 2008

Обходной путь должен исправить многопоточную 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.

Как только вы поработаете, придумать более общее решение должно быть тривиально.

1 голос
/ 18 сентября 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?

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

0 голосов
/ 21 ноября 2008

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

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

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

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

...