2010-01-08 3 views
1

관리되지 않는 DLL에서 예외를 throw하고 관리되는 응용 프로그램에서 처리 할 수 ​​있습니까?혼합 응용 프로그램에서 예외 처리를 수행하는 방법? (관리되지 않는 DLL을 사용하는 관리되는 응용 프로그램)

내 관리되지 않는 C++는 DLL 오류의 경우에는 예외를을 던져, 그들은 가 호출하는 실행 가능한 응용 프로그램에서 처리해야한다.

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

이 이전에 근무하지만 지금은 응용 프로그램이 다른 플래그 (/ CLR 등) 우리가 어떤 코드 관리 사용할 필요가 원인으로 컴파일 입니다. 예외가 throw 될 때 System.ExecutionEngineException 받는다 내 호출 exe catch (...) 함께 잡히지 않는 것.

나는 예외 처리를 위해/clr implies/EHa를 보았지만 이것은 지금까지 이해할 수있는 옵션을 선택하는 것처럼 보였다.

대체 (컴파일러/링커 설정) ~ 모듈 (DLL/exe) 경계에서 예외 및 예외를 catch 할 수 있습니까?

감사합니다. Marco

답변

2

있습니다. 가비지 수집 힙이 손상되었음을 발견하면 ExecutionEngineException이 CLR에 의해 발생합니다. 관리되는 프로그램에서 관리되지 않는 코드를 실행하면 그렇게하기가 어렵습니다. 간단한 버퍼 오버런으로 충분합니다. 그러나 버그를 찾는 것은 쉽지 않습니다.

+0

마침내 찾았습니다 - 비트 쉬프트를 사용하여 비트 맵 색상을 할당하는 포인터 작업 - 92 및 16 비트 시대의 MSDN 코드 샘플. * 한숨 * 응용 프로그램을 전혀 크래시하지 않은 문제가 발생했지만 예외를 던지거나 (인수없이 던져서라도) 많은 시간이 지나면 문제가 계속 발생합니다. ** 도움을 주셔서 감사합니다. ** – marco4net

0

관리되지 않는 코드에서 예외를 throw 할 수는 있지만 예외는 결국 clr에 의해 catch되고 SEH 예외로 래핑됩니다.

이 질문을 읽을 수 있습니다 : 무슨 뭔가 다른

Best practice for translating exceptions in C++/CLI wrapper class

+0

링크 용 merci! 포인터를 수정 한 후 흥미로운 읽기, 나는 정확한 예외를 받았습니다. – marco4net

관련 문제