Как сделать обработку исключений в смешанных приложениях? (управляемое приложение, использующее неуправляемую DLL) - PullRequest
1 голос
/ 08 января 2010

Можно ли генерировать исключения в неуправляемой DLL и обрабатывать их в управляемом приложении?

Моя неуправляемая C ++ DLL генерирует исключения в случае ошибок, и они должны обрабатываться в вызывающем исполняемом приложении .

CMyFileException *x = new CMyFileException;
throw(x);

Раньше это работало, но теперь приложение скомпилировано с разными флагами (/ clr и т. Д.), Поэтому нам нужно использовать некоторый управляемый код . Когда генерируется исключение, я получаю System.ExecutionEngineException, который, похоже, не перехватывается даже с catch (...) в моем вызывающем exe.

Я видел, что опция компилятора / clr подразумевает / EHa для обработки исключений, но, похоже, это была возможность выбора, насколько я понимаю, сейчас.

Будет ли какая-либо другая альтернатива (настройка компилятора / компоновщика) * от 1023 * до генерировать и перехватывать исключения через границы модуля (DLL / exe)? Спасибо за вашу поддержку! Marco

Ответы [ 2 ]

2 голосов
/ 11 января 2010

Что-то еще происходит. CLR генерирует исключение ExecutionEngineException, когда обнаруживает, что куча мусора, поврежденная при сборке, повреждена. Это не сложно сделать, когда вы запускаете неуправляемый код в управляемой программе. Достаточно простого переполнения буфера. Однако найти ошибку нелегко.

0 голосов
/ 11 января 2010

возможно создать исключение в неуправляемом коде, но исключение в конечном итоге будет перехвачено clr и обернет его как исключения SEH.

Вы можете прочитать этот вопрос:

Наилучшая практика перевода исключений в класс-оболочку C ++ / CLI

...