Впервые я использую такой сайт, но я сильно застрял.
Следующий справочный раздел включен для полноты, поскольку я не уверен, что какое-либо из действий, описанных в нем, могло способствовать решению текущей проблемы, с которой я сталкиваюсь.
Фон
Мы с коллегой написали много кода на С ++ в консольном приложении (с настройками по умолчанию) в Visual Studio 2010 (полная версия) для университетского задания. Мы решили, что хотим попробовать свои силы в приложении winforms, и создали его в Visual Studio 2010 и импортировали весь наш код из консольного приложения. Мы столкнулись со следующими проблемами:
- Необходимо добавить наши включения в файл "stdafx.h", а затем #include "stdafx.h" во все наши файлы реализации (.cpp).
- В местах, где мы использовали строки c ++ (std :: string), нам пришлось перейти на строки управляемой системы (System :: String ^) для совместимости с CLR.
- Изменен параметр компиляции «Поддержка общеязыковой среды выполнения» на / clr вместо / clr: pure. Это было необходимо для устранения ошибок компоновки (LNK2028, LNK2019), которые были у нас с boost :: shared_ptr ...
После того, как мы сделали все вышеперечисленное, наш проект компилировался.
Проблема
Когда мы запускаем приложение, мы получаем следующую ошибку подтверждения:
_CrtIsValidHeapPointer (pUserData)
Это утверждение немедленно завершается неудачей, по-видимому, без выполнения какого-либо кода, поскольку, когда я устанавливаю точки останова в начале main, они не достигаются при отладке (стек вызовов пуст).
Единственный способ запустить приложение - установить для параметра CLR значение / clr: pure и полностью исключить использование boost.
У меня есть 3 вопроса:
- Код выполняется? Я знаю, что звучит невозможно, что утверждение может быть ошибочным без выполнения кода. Может быть, есть что-то, что случается перед основным?
- Что на самом деле означают параметры / clr и / clr: pure?
- Можно ли скомпилировать библиотеки boost для кода, совместимого с clr? Если это так, что может вызвать проблемы со ссылками?
Спасибо всем за ваше время, я не разместил ни одного кода, потому что я буквально не знаю, что отправлять ... Я понятия не имею, где возникает проблема. Если у кого-то есть предложения относительно того, какой код размещать, я открыт для них.
С уважением
Брэд