Проблемы с afxwin.h в приложении Windows Form 2015 для Windows Form
Некоторое время назад я написал C ++ CLI-приложение Windows Form, которое прекрасно скомпилировалось в Visual Studio 2013. Теперь я хотел перекомпилировать его в Visual Studio 2015 Update 1, но столкнулся с проблемой, и после нескольких часов тестов я выяснил виновника являетсяafxwin.h
.
TL; DR - Есть ли способ, которым я могу использоватьstdafx.h
(такafxwin.h
и все остальные операции импорта) в приложении Windows Form, скомпилированном с Visual Studio 2015 без сбоя приложения при запуске?
Вот как воспроизвести те же проблемы, с которыми я сталкиваюсь в моем приложении.
Поскольку форма Windows больше не доступна в качестве шаблона проекта в VS2015, я создалCLR Пустой проект называетсяТестовое задание
Ctrl-Shift-A, чтобы добавитьUI > Форма Windows называетсяMyForm
ВMyForm.cpp я добавил это:
#include "MyForm.h"
using namespace System;
using namespace System::Windows::Forms;
[STAThread]
int main(cli::array<System::String^>^ args)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Test::MyForm form;
Application::Run(%form);
}
ПодСвойства конфигурации > Linker > продвинутый я поставилТочка входа вглавный
ПодСвойства конфигурации > Linker > система я поставилSubSystem вWindows (/ SUBSYSTEM / WINDOWS)
COMPILE (КОНФИГУРАЦИЯ ОТЛАДКИ): компилируется без ошибок / предупреждений
БЕЖАТЬ: работает без проблем.
Теперь давайте попробуем добавитьafxwin.h вMyForm.cpp:
#include <afxwin.h>
ПодСвойства конфигурации > генеральный я поставилИспользование МФЦ вИспользуйте MFC в общей DLL
COMPILE (КОНФИГУРАЦИЯ ОТЛАДКИ): компилируется без ошибок / предупреждений
БЕЖАТЬ: приложение даже не запускается, оно просто показываетОшибка отладки ошибка в выражении_CrtIsValidHeapPointer (блок)
Теперь, чтобы исправить эту ошибку, я обнаружил, что необходимо удалитьТочка входа, так:
ПодСвойства конфигурации > Linker > продвинутый Я удалилТочка входа значение (которое я ранее установил наглавный)
COMPILE (КОНФИГУРАЦИЯ ОТЛАДКИ): компилируется без ошибок / предупреждений
БЕЖАТЬ: приложение снова даже не запустится, оно больше не показываетОшибка отладки ноSystem.AccessViolationException в неизвестном модуле и «Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена».
Это ошибки, которые я получаю в своем приложении, и мне интересно, как это возможно, что просто в том числеafxwin.h
дает все эти проблемы в VS2015, а в VS2013 - нет.
Что я могу сделать, чтобы это исправить, не возвращаясь к VS2013?