2014-11-14 4 views
0

SEH를 통해 구현되지 않은 VC (최신 버전 중 하나)를 사용하고 C++ 예외를 사용할 수 있습니까?VC에서 SEH가없는 C++ 예외

참고 - C++ catch 절 (/ Eha \/Ehsc)을 사용하여 SEH 예외를 포착하는 것이 아니라 백그라운드에서 SEH 예외가 발생하지 않고 C++ 예외를 사용하는 것을 의미합니다.

+2

나는 근본적인 목표가 무엇인지, 그리고 "날아 다니는 것"이 ​​무엇인지 알고 싶어합니다. 구조화 된 예외 처리는 복잡 할 수 있지만 혼란스러운 것은 아닙니다. –

+0

내 대답 변경, 초. 이것은 런타임의 해당 부분을 대체하는 문제입니다 (_CxxThrowException 외.). – defube

답변

0

기본적으로 C++ 예외는 SEH 위에 작성됩니다.

변경할 수는 있지만 런타임의 상당 부분을 다시 작성하고 프레임 처리 논리를 직접 구현해야합니다 (많은 어셈블리로 읽음).

32 비트 및 64 비트 빌드 (x86 용)의 스택 프레임 레이아웃이 크게 다르므로 그 사이에 많은 코드를 재사용 할 수 없습니다 (64 비트 EH는 PE 이미지의 다른 영역).

사실, 이 정말로 인 경우를 제외하고는 어디에서나 예외를 사용하여 가능한 한 코드가 가능한 한 휴대 성이 있는지 확인하십시오. 당신은 대부분 SEH가 심지어 거기에 있지 않다는 것을 가장 할 수 있습니다.

+0

동의. SEH는 VC가 C++ 예외에 대해'try' /'catch '를 어떻게 구현하는지에 대한 개인적인 세부 사항이다. 실제로 SEH 예외를 직접 처리 할 필요가 없다면 SEH를 무시하십시오.이 경우'try' /'catch' 대신'__try' /'__except'를 사용해야합니다. –