2008-08-03 1 views
17

MFC приложение, которое я пытаюсь перенести использует afxext.h, что приводит к _AFXDLL чтобы установить, что вызывает эту ошибку, если я поставил /MT:Build для Windows NT 4.0 с использованием Visual Studio 2005?

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

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

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

+1

Кто-то, пожалуйста, про это. – 2015-02-04 14:11:15

ответ

8

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

this thread для некоторых фон.

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

+0

Что делает эту проблему запутанной, так это то, что если вы статичная ссылка, в основном загружаются только файлы объектов, необходимые для используемых вами символов, поэтому она работает на NT4 большую часть времени. – 2012-05-13 04:49:48

4

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

1

Хотя я не знаком с 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, сервис, интерфейс GUI?) Можете ли вы преобразовать проект в неуправляемый проект на C++ в VC 8.0?

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

3

Обходным решением является исправление многопоточной DLL. Simple instructions.Краткое резюме:

Судоходная 8,0 C Runtime библиотеки 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.

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

-1

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

Пожалуйста, попробуйте эту «Свойства конфигурации», «Общие», «Использование MFC» «Использовать MFC в статической библиотеке» «Свойства конфигурации», «Общие», «Использование АТЛ» на «Static Link в АТЛ»

"Свойства конфигурации", "C \ C++", "Code Generation", "Runtime библиотеки" для "многопоточных (\ MT)"

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

Смежные вопросы