Visual Studio 2010 включает MFC, даже если указано пустое консольное приложение (C )

#visual-studio-2010 #visual-c #mfc

#visual-studio-2010 #visual-c #mfc

Вопрос:

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

Я создал консольное приложение в Visual C и указал, что оно должно быть пустым. После помещения всего моего исходного кода в виртуальную папку и его компиляции произошла ошибка:

c:program filesmicrosoft visual studio 10.0vc atlmfc includeafx.h(24): неустранимая ошибка C1189: #ошибка: Для создания приложения MFC с помощью /MD[d] (версия CRT dll) требуется общая версия MFC dll. Пожалуйста, #define _AFXDLL или не используйте /MD[d]

c:program filesmicrosoft visual studio 10.0vc atlmfc includeafx.h(24): неустранимая ошибка C1189: #ошибка: Для создания приложения MFC с помощью /MD[d] (версия CRT dll) требуется общая версия MFC dll. Пожалуйста, #define _AFXDLL или не используйте /MD[d]

c:program filesmicrosoft visual studio 10.0vc atlmfc includeafx.h(24): неустранимая ошибка C1189: #ошибка: Для создания приложения MFC с помощью /MD[d] (версия CRT dll) требуется общая версия MFC dll. Пожалуйста, #define _AFXDLL или не используйте /MD[d]

Действительно, странная ошибка, потому что я никогда не включал никаких файлов MFC. Поэтому я исправил ситуацию, указав «/MT» в настройках генерации кода.

Это работало хорошо … пока я не решил включить «Windows.h», что породило эту ошибку:

c:program filesmicrosoft visual studio 10.0vcatlmfcincludeafxv_w32.h(16): неустранимая ошибка C1189: #ошибка: WINDOWS.H уже включен. Приложения MFC не должны #включать windows.h

c:program filesmicrosoft visual studio 10.0vcatlmfcincludeafxv_w32.h(16): неустранимая ошибка C1189: #ошибка: WINDOWS.H уже включен. Приложения MFC не должны #включать windows.h

Я перепробовал все, что мог придумать, включая воссоздание проекта с предварительно скомпилированными заголовками и без них, приложение Win32 вместо консоли и приложение wxWidget. Похоже, что все эти приложения пытаются включить MFC, хотя я никогда не указывал. Кто-нибудь может пролить свет на эту проблему? Спасибо!

Комментарии:

1. Ну, и как выглядит ваш код? Какие заголовки вы включаете? Можете ли вы продемонстрировать минимальное воспроизведение?

2. pastebin.com/VWsTC6vc Это похоже на проблему. Я использую библиотеку CMarkup для работы с XML. По-видимому, он использует Cstrings, любопытство заставляет меня задуматься, будет ли это работать без включения MFC, но я понятия не имею, как это сделать.

Ответ №1:

Узнайте, что включает заголовки MFC — в этом может помочь /showIncludes опция.

Которое на странице свойств проекта IDE находится под:

 C/C   | Advanced | Show Includes
  

Как только вы узнаете, кто их включает, вы сможете принять решение о том, как решить проблему — вы могли бы просто удалить ошибку #include , но для этого может потребоваться удаление используемой вами библиотеки, зависящей от MFC.

Комментарии:

1. Проблема во внешней библиотеке или, тем более, в источнике. Я отслеживаю, как указать строки STL в сравнении с CStrings MFC в библиотеке CMarkup, которую я использую. Однако навигация по их документации оказывается менее удобной для разработчиков.

2. Проблема решена, CMarkup был излишне неясен в этом вопросе. Спасибо.

3. Вы можете использовать CString без библиотеки MFC, используя #include <atlstr.h> . Microsoft выпустила несколько служебных классов из библиотеки MFC еще в версии 2003 (возможно, в версии 2002). Если CString это все, что использует CMarkup, мы надеемся, что это должно быть простым изменением (почти наверняка проще, чем изменение для использования std::string ).

Ответ №2:

Убедитесь, что параметр «ИСПОЛЬЗОВАНИЕ MFC» указан в параметре «Использовать MFC в общей библиотеке DLL». Это исправило это для меня.

Ответ №3:

Если требуется MFC, установите следующие значения ( Debug/Win32):

Свойства конфигурации > Общие :

Использование MFC: используйте MFC в общей библиотеке DLL

Свойства конфигурации > C / C > Генерация кода :

Библиотека времени выполнения: /MDd

Если MFC не требуется, и требуются только стандартные библиотеки окон, сохраните настройки, указанные ниже.

Свойства конфигурации > Общие :

Использование MFC: используйте стандартные библиотеки Windows

Свойства конфигурации > C / C > Генерация кода :

Библиотека времени выполнения: /MTd