Это - на самом деле решенная проблема, но это настолько тайно, я думал, что совместно использую его для других пользователей.
Также, возможно, другие могли бы предложить причины?
Так или иначе я работаю над "смешанным режимом" приложение.NET, записанное в управляемом С++, но с тяжелыми ссылками в существующие собственные библиотеки.
Проблема была, необработанные управляемые исключения закончились как Нарушения прав доступа Win32. Под чем я подразумеваю, это - то, что вместо того, чтобы показать хорошее диалоговое окно.NET каждый добирается за необработанным управляемым исключением, вместо этого я добрался бы, более старый стиль "Необработанное win32 исключение произошел в..." сообщении.
Вот интересная вещь: если я запускаю приложение в отладчике, то выданное организованное исключение правильно взято. т.е. отладчик показывает мне строку.
Однако при выполнении обычно, это превратилось бы в это Нарушение прав доступа. Присоединение отладчика в той точке произвело бы мало полезной информации (это даже не покажет разумное отслеживание стека).
Так, мне это предполагает, что что-то происходит в собственном коде непосредственно перед тем, как необработанное управляемое исключение достигает обработчика исключений.
Так так или иначе мне удалось решить проблему путем сравнения моего проекта с чистым новым C++ управляемый проект, сгенерированный Visual Studio 2008.
Фиксация должна была сделать следующее:
Измените флаг SUBSYSTEM / (Свойства проекта-> Компоновщик-> Система-> SubSystem) от/SUBSYSTEM:WINDOWS до "Не Набор"
Переключенный с использования старого стиля WinMain () к использованию основного нового стиля ().
т.е. это раньше было
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
И это теперь
int main(array<System::String ^> ^args)
[Почему я использую этот странный _tWinMain? Это было тем, что было сгенерировано Visual Studio.NET IDE много лет назад, когда Вы создаете смешанное Приложение Windows режима образца. Это всегда хорошо работало (до сих пор), таким образом, я никогда не потрудился изменять его. _tWinMain является просто макросом к WinMain]
Я внес это изменение, и проблема исчезает. Необработанные исключения.NET теперь правильно захватываются так, я могу теперь на самом деле отладить их.
Я также внес обратное изменение в чистое демонстрационное приложение C++ и доказал, что это была причина.
Так, действительно мои вопросы, какого черта продолжается?
Это было просто, что я использовал старый стиль WinMain вместо нового main(array <String^>^)
?
Я должен, возможно, сообщить об этом Microsoft (кто-либо будет заботиться ;-))?