У меня есть довольно старая неуправляемая программа C ++, которая называется управляемый код C # (vs2003), которую мне нужно преобразовать.(исходный код на c # был написан на .NET1.1, и его нужно было перекомпилировать, он был скомпилирован в 4.0). Хотя в конечном итоге мне нужно переписать все это, я надеялся заставить исходный код немного работатьдлиннее.
Я сварил проблему, которую вижу в этом тестовом примере:
Используя VS2010, я создал новый проект: «Приложение Visual C ++ | MFC»
Используя мастер, я затем создал диалоговое приложение со всеми настройками по умолчанию.После включения следующего заголовка в класс приложения
#include <fstream>
в InitInstance нового класса приложения I создал файл со следующими двумя строками кода:
ofstream xmlstream;
xmlstream.open("junk.txt");
Когдаприложение запускает диалоговое окно, создает новый файл как в режиме отладки, так и в режиме выпуска
Однако, когда я пытаюсь включить код c #, изменяя свойства проекта | общие | общий флаг поддержки времени выполнения на общую поддержку времени выполнения, старый синтаксис (/clr:oldSyntax
) Я получаю следующую ошибку.В режиме отладки программа работает нормально и создает файл.В режиме Release программа завершает работу, выполняя строку
ofstream xmlstream;
с ошибкой:
An unhandled exception of type 'System.AccessViolationException' occurred in Unknown Module.
Дополнительная информация: Попытка чтения или записи в защищенную память.Это часто указывает на то, что другая память повреждена.
Единственная другая ссылка на проблемы с этим типом программы предложила установить свойства для "C / C ++ | Code Generation | Enable C ++ Exceptions" в /EHa
, чтоЯ сделал.
Я проверил ссылку на fstream.h вместо fstream (заголовки старого стиля больше не существуют в 2010 году, а в 2003), но я использую новые.Если в синтаксисе объявления объекта потока сейчас что-то не так, я не уверен, что не так.
Есть ли другой параметр, который мне нужно установить для правильной компиляции, или я по-своему что-то делаючто не имеет смысла?