#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