Я пытаюсь создать C ++ DLL в смешанном режиме (управляемый и неуправляемый) с опцией CLR, и мне требуется использование библиотеки AFX. Поэтому я включил «afxwin.h» в файл (который использует GL / gl.h).
Однако я сталкиваюсь с ошибками компиляции независимо от того, что я делаю, и я попробовал каждую опцию в настройках проекта, чтобы исправить их, но безрезультатно.
A. Когда я компилирую с опцией CLR, я вижу эту ошибку (когда он компилирует файл, который включает afwin.h):
1> c: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ include \ afx.h (24): фатальная ошибка C1189: #error: Сборка приложения MFC с / MD [d] (версия CRT dll) требует MFC разделяемой версии DLL. Пожалуйста #define _AFXDLL или не используйте / MD [d]
Б. Когда я компилирую с _AFXDLL, определенным в stdafx.cpp или включающим «Использовать MFC в общей DLL», для устранения ошибки в A, я вижу эти и целую кучу других ошибок в одном файле:
1> _WIN32_WINNT не определено. По умолчанию _WIN32_WINNT_MAXVER (см. WinSDKVer.h)
1> c: \ program files (x86) \ microsoft visual studio 10.0 \ vc \ atlmfc \ include \ afxanimationcontroller.h (46): ошибка C2059: синтаксическая ошибка: ‘-‘
1> c: \ program files (x86) \ microsoft visual studio 10.0 \ vc \ atlmfc \ include \ afxanimationcontroller.h (60): ошибка C2143: синтаксическая ошибка: отсутствует ‘;’ до ‘}’
1> c: \ program files (x86) \ microsoft visual studio 10.0 \ vc \ atlmfc \ include \ afxanimationcontroller.h (60): ошибка C2238: неожиданный токен (ы) предшествует ‘;’
1> c: \ program files (x86) \ microsoft visual studio 10.0 \ vc \ atlmfc \ include \ afxanimationcontroller.h (61): ошибка C2059: синтаксическая ошибка: ‘общедоступная’
1> c: \ program files (x86) \ microsoft visual studio 10.0 \ vc \ atlmfc \ include \ afxanimationcontroller.h (65): ошибка C2059: синтаксическая ошибка: ‘)’
1> c: \ program files (x86) \ microsoft visual studio 10.0 \ vc \ atlmfc \ include \ afxanimationcontroller.h (65): ошибка C2589: ‘-‘: недопустимый токен в правой части ‘::’
1> c: \ program files (x86) \ microsoft visual studio 10.0 \ vc \ atlmfc \ include \ afxanimationcontroller.h (65): ошибка C2059: синтаксическая ошибка: ‘::’
1> c: \ program files (x86) \ microsoft visual studio 10.0 \ vc \ atlmfc \ include \ afxanimationcontroller.h (67): ошибка C2143: синтаксическая ошибка: отсутствует ‘;’ до ‘{‘
Есть идеи, как решить эту проблему? Я использую VS 2010.
Изменение параметра MFC впоследствии на «Использовать MFC в общей DLL» не так просто, есть и другие параметры, которые вам, возможно, придется изменить.
Самый простой способ — создать новый фиктивный проект MFC с помощью мастера и сравнить свойства двух проектов.
Что касается CLR, то для меня работает помещение всего управляемого кода C ++ в один или два источника и включение / CLR только для этих источников, а не для всего проекта.
Других решений пока нет …