clr: oldSyntax предотвращает ofstream - PullRequest
0 голосов
/ 18 мая 2011

У меня есть довольно старая неуправляемая программа 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), но я использую новые.Если в синтаксисе объявления объекта потока сейчас что-то не так, я не уверен, что не так.

Есть ли другой параметр, который мне нужно установить для правильной компиляции, или я по-своему что-то делаючто не имеет смысла?

1 Ответ

0 голосов
/ 18 мая 2011

Если я не ошибаюсь, VS продолжил поставлять «устаревшую» библиотеку iostreams (предстандартная версия от Dinkumware). ( ссылка ) Я не уверен, что VS2003 все еще включает его, но зная Microsoft, я не удивлюсь.

Возможно, он все еще используется и не совместим с новыми контейнерами стандартной библиотеки C ++ / ABI. Итак, я бы проверил заголовки и использование пространства имен, чтобы найти

#include <iostream.h>

крепление к

#include <iostream>

Ссылка выше содержит несколько очень хороших рекомендаций о том, как перенести любой код iostreams старого стиля в новый стиль, поэтому я повторю ссылку: http://members.gamedev.net/sicrane/articles/iostream.html

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...