Для всех тех, кто испытывает эту ошибку в проектах ATL (в основном при попытке добавить поддержку MFC), вот решение, которое я нашел после нескольких дней разочарования!
Прежде всего, эта ссылка была более полезной для меня, чем все остальные. Это указало мне в правильном направлении. Проблема возникает, если «сгенерированные файлы» (содержащие код прокси и заглушки, так же как и руководства типов) по какой-то причине были удалены и добавлены в проект. Это приводит к тому, что Visual Studio добавляет их в неправильном порядке!
Обычно вы сначала сталкиваетесь с ошибкой «ATL требует компиляции C ++», но вы, возможно, исправили это, отключив параметр Yc/Yu
(скомпилированные заголовки) для этого файла.
Что вы должны сделать дальше, это выгрузить ваш проект и отредактировать его. Найдите группы товаров, которые определяют сборку и включают порядок (ClCompile
и ClInclude
). Проверьте их порядок и настройки.
Компиляции должны появляться в следующем порядке:
dllmain.cpp
(с CompileAsManaged
, установленным на false
и PrecompiledHeader
, оставленным пустым).
- Исходный код библиотеки (
MyLib.cpp
, содержащий DllCanUnloadNow
и т. Д.)
- Код прокси / заглушки (
MyLib_i.c
; с теми же настройками, что и dllmain.cpp
)
stdafx.cpp
(с PrecompiledHeader
, установленным на Create
)
- Все остальные исходные файлы библиотеки (ваш фактический контент библиотеки)
xdlldata.c
(с теми же настройками, что и dllmain.cpp
)
Включения должны быть упорядочены следующим образом:
dllmain.h
MyLib_i.h
Resource.h
stdafx.h
targetver.h
- ... (фактические заголовки библиотеки)
xdlldata.h
Исправление порядка сборки исправило мой проект, и я смог создать новую чистую сборку.