Compilerfehler C2707

Aktualisiert: November 2007

Fehlermeldung

'Bezeichner' : Falscher Kontext für systeminterne Funktion
'identifier' : bad context for intrinsic function

Systeminterne Funktionen für die strukturierte Ausnahmebehandlung sind in bestimmten Kontexten unzulässig:

  • _exception_code() außerhalb eines Ausnahmefilters oder eines __except-Blockes

  • _exception_info() außerhalb eines Ausnahmefilters

  • _abnormal_termination() außerhalb eines __finally-Blockes

Um den Fehler zu beheben, sollten Sie sicherstellen, dass systeminterne Funktionen für die Ausnahmebehandlung im richtigen Kontext verwendet werden.

Beispiel

Im folgenden Beispiel wird C2707 generiert.

// C2707.cpp
#include <windows.h>
#include <stdio.h>

LONG MyFilter(LONG excode) 
{
    return (excode == EXCEPTION_ACCESS_VIOLATION ?
        EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH);   // OK
}

LONG func(void) 
{
    int x, y;
    return(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?  // C2707
             EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH);

    __try 
    {
        y = 0;
        x = 4 / y;
        return 0;
     }

    __except(MyFilter(GetExceptionCode())) 
    {
        return(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ? // ok
               EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH);
    }
}

int main() 
{
    __try 
    {
        func();
    } __except(EXCEPTION_EXECUTE_HANDLER)
    {
        printf_s("Caught exception\n");
    }
}