Я создал два свежих проекта с VS2017, один работал, другой нет, поэтому я сравнил разницу. Один рабочий был создан с помощью
File > New Project > Visual C++ > MFC/ATL > MFC Application
, а другой не был создан - с помощью
File > New Project > Visual C++ > Windows Desktop > Windows Desktop Wizard
с добавлением MFC. В обоих случаях я использовал MFC в качестве статической библиотеки. Я выяснил два исправления. Но перед этим мы должны добавить импорт, потому что второй проект имел NONE!
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
Теперь у меня сработало одно из двух исправлений:
Project > Properties > Configuration Properties > General > Use of MFC
установите его для использования в Shared DLL, это также должно автоматически установить C/C++ > Code Generation > Runtime Library
в Multi-threaded debug dll /MDd
, чтобы убедиться, что это действительно так.
Попробуйте скомпилировать сейчас, у меня это сработало.
- Я заметил, что у рабочего проекта был какой-то импорт в stdafx.h, я скопировал их в pch.h в другом проекте, он работал (оставив свойства без изменений, поэтому использовалась статическая библиотека). Код был скопирован так:
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
// turns off MFC's hiding of some common and often safely ignored warning messages
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
Другие решения, меняющие настройки компоновщика, я их пробовал, но они не работали.
Я был бы признателен, если кто-то знает, почему мое решение работает, это странно, почему включение этих заголовков в pch.h
решает проблему компоновщика, тогда как включение этих же заголовков в любом другом месте вызывает эту ошибку ??