У меня была такая же проблема, и ни одно из решений не сработало. Проблема, описанная в ОП, исходила от включения класса:
class AFX_EXT_CLASS CMyClass : public CObject
{
public :
// ....
}
Это был класс экспорта из библиотеки DLL, который я хочу использовать в консоли exe. Если я создаю консольное приложение как 'using mfc' в мастере создания, то это
Ошибка не произошла, но эта опция приводит к созданию другой структуры приложения.
В любом случае я пытался включить различные заголовки, чтобы он знал AFX_EXT_CLASS
, определил его, но ничего не получалось. Короче говоря, решение состоит в том, что мы должны разрешить использовать MFC для приложения, чтобы оно понимало экспортированный класс MFC из dll. Как мы это делаем, редактируя файл .vcproj
и вставляя строку UseOfMFC="2"
, как показано ниже:
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="2" <-------------Insert this line here
CharacterSet="1"
Также #include <afx.h>
в stdafx.h (я включил его справа вверху перед первым включением).
Теперь отпустите, очистите и соберите ошибку, которая должна исчезнуть.
Не было другого способа изменить эту опцию из настроек проекта. Этот параметр отличается от Свойства проекта >> Свойства конфигурации >> Общие >> «Использование MFC» .
Обновление
Трюк UseOfMFC="2"
может быть полезен в другом месте, но, очевидно, если вы просто #include <afx.h>
И измените настройки project properties >> General >> 'Use of MFC'
на Использование MFC в shared dll, эта ошибка исчезнет. Если вы не измените более поздние настройки, произойдет ошибка компилятора
c:\program files (x86)\microsoft visual studio 8\vc\atlmfc\include\afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
Изменение этого значения также устанавливает UseOfMFC="2"
в файле проекта, так что это правильный путь.