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

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

Используйте параметр / MD для сборки _AFXDLL

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

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

5 ответов

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

    См. этот поток для некоторого фона.

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

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

  3. Хотя я не знаком с 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 для mix это звучит для меня как проблема совместимости подсистем. Это часть MFC из моего исследования Google. Afxext.h, по-видимому, расширения MFC (Microsoft Foundation Class).

    Вы можете удалить свою зависимость от MFC? Что это за приложение? (CLR, сервис, графический интерфейс?) Можно ли преобразовать проект в неуправляемый проект C++ в VC 8.0?

    Надеюсь, что некоторые из них помогут вам.

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

    Доставка библиотеки времени выполнения DLL 8.0 C (MSVCR80.DLL) не поддерживает
    NT 4.0 SP6 по одной причине и только по одной причине: кто-то в Microsoft
    добавлен вызов функцииGetLongPathNameW, которой не существует в
    kernel32.dll на NT 4.0.

    CRTLIB.C On line 577, there is a call to GetLongPathNameW. просто замените его на: ret = 0;
    используйте только эту сборку MSVCR80.DLL на NT 4.0.

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

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

    Пожалуйста, попробуйте это
    «Свойства конфигурации», «общие», «использование MFC» для » использование MFC в статической библиотеке»
    «Configuration Properties», «General», «Use of ATL» to » Static Link to ATL»

    «Configuration Properties», » C\C++», «Code Generation»,» Runtime Library » to » Multi-Threaded (\MT)»

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