C++에서 사용하는 DLL에서 오류가 나면 try catch에서 잡히지 않는문제를 해결 하였다.
AccessViolationException 예외는 네이티브 쪽에서 메모리 접근 위반을 했을 때 발생 하는 예외 이다.
할당되지 않은 메모리 또는 코드가 접근 권을 갖지 않는 메모리를 읽거나 쓰기를 시도하면 네이티브 코드(언 세이프 코드)에서 액세스 위반이 발생한다.
그러나 보통 System.Exception의 파생 클래스인 셈이라서 catch에서 이 예외를 포착할 것으로 생각하지만 애플리케이션은 이 예외를 잡지 못해서 이상 종료를 한다.
.NET Framework 3.5 이전에는 AccessViolationException을 catch 할 수 있었지만 .NET Framework 4 이후에서는 못하도록 바뀌었다.
이 예외를 잡고 싶다면 두 가지 방법을 하나를 하면 된다.
1. HandleProcessCorruptedStateExceptionsAttribute
AccessViolationException을 catch 하고 싶은 메소드에HandleProcessCorruptedStateExceptionsAttribute를 붙여서 잡을 수 있다.
[HandleProcessCorruptedStateExceptions]
void DoSomething()
{
try {
AccessViolationException를 발생하는();
} catch(AccessViolationException e) {
//---포착 가능
}
}
2.legacyCorruptedStateExceptionsPolicy
하위 호환성 때문에 기존(.NET Framework 3.5 이전)처럼 애플리케이션 전체에서 포착할 수 있도록 하고 싶은 경우. 구성 파일(*. config)에<legacyCorruptedStateExceptionsPolicy>요소를 넣어서 해결할 수 있다.
<configuration>
<runtime>
<legacyCorruptedStateExceptionsPolicy enabled="true"/>
</runtime>
</configuration>
'wpf' 카테고리의 다른 글
WPF에서 MiniDump 뜨는법 (0) | 2018.01.02 |
---|---|
다중 모니터에서 전체 화면 실행 (0) | 2017.12.07 |
wpf FlipView (0) | 2017.10.19 |
Listview , Button MouseOver, Selcted Color 제거 (0) | 2017.09.12 |
Converter를 쓰지 않고 바인딩된 TextBlock에 글자를 추가하고 싶을때 (0) | 2017.09.06 |