Для всех, кто сталкивается с этой ошибкой в проектах 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
Исправив порядок сборки, мой проект был исправлен, и я смог создать новую чистую сборку.
person
Carsten
schedule
13.01.2015