다음을 통해 공유


예외: 직접 함수에서 예외를 Throw

MFC 예외 처리 패러다임을 사용 하 여 전적으로 MFC 또는 다른 라이브러리 함수에서 throw 된 예외를 catch 하는 것이 가능 합니다.라이브러리 코드에서 throw 되는 예외를 catch 하는 것 외에 예외 조건이 발생할 수 있는 함수를 작성 하는 경우 코드에서 예외 수입니다.

예외가 throw 되 면 현재 함수의 실행 중지 되 고 직접 점프는 catch 프레임 안쪽의 예외 블록입니다.정상적인 종료 경로 함수에서 예외 메커니즘을 무시합니다.따라서 정상 종료 시 삭제 하려는 메모리 블록은 삭제 해야 합니다.

예외를 throw.

  1. 같은 MFC 도우미 함수 중 하나를 사용 AfxThrowMemoryException.이러한 함수는 미리 할당 된 예외 개체의 적절 한 형식 throw합니다.

    다음 예제에서는 함수는 두 개의 메모리 블록을 할당 하려고 및 실패할 경우 예외를 throw 합니다.

    {
        char* p1 = (char*)malloc( SIZE_FIRST );
        if( p1 == NULL )
            AfxThrowMemoryException();
        char* p2 = (char*)malloc( SIZE_SECOND );
        if( p2 == NULL )
        {
            free( p1 );
            AfxThrowMemoryException();
        }
    
        // ... Do something with allocated blocks ...
    
        // In normal exit, both blocks are deleted.
        free( p1 );
        free( p2 );
    }
    

    단순히 첫째 할당이 실패 하면 메모리 예외를 throw 할 수 있습니다.첫 번째 할당은 성공 했지만 두 번째 오류가 발생 하면 예외를 throw 하기 전에 첫째 할당 블록을 해제 해야 합니다.두 할당이 실패 하면 정상적으로 진행 하 고 함수를 종료할 때 블록을 약속 수 있습니다.

     -또는- 

  2. 사용자 정의 예외를 사용 하 여 문제 조건을 지정 합니다.모든 형식의 전체 클래스 항목 예외로 throw 할 수 있습니다.

    다음 예제는 웨이브 장치를 통해 소리를 재생 하려고 및 오류가 있으면 예외가 throw 됩니다.

    #define WAVE_ERROR -5
    {
       // This Win32 API returns 0 if the sound cannot be played.
       // Throw an integer constant if it fails.
       if( !PlaySound(_T("SIREN.WAV"), NULL, SND_ASYNC) )
          throw WAVE_ERROR;
    }
    

[!참고]

MFC의 기본 처리 예외 적용에 대 한 포인터에만 CException 개체 (개체의 CException-클래스를 파생).위의 예제에서는 MFC의 예외 메커니즘이 무시 됩니다.

참고 항목

개념

MFC에서 처리 하는 예외