OPLOSSING: SEH-uitzonderingen worden opgevangen door een verkeerde uitzonderingshandler wanneer asynchrone uitzonderingsafhandeling is ingeschakeld in WEC 2013

Van toepassing op
Windows Embedded Compact 2013

In dit artikel wordt een probleem beschreven waarbij SEH-uitzonderingen worden opgevangen door een verkeerde handler in Windows Embedded Compact 2013. Er is een update beschikbaar om dit probleem op te lossen. Voordat u deze update installeert, moeten alle eerder uitgegeven updates voor dit product zijn geïnstalleerd.

Symptomen

Neem als voorbeeld het volgende scenario:

  • U gebruikt de invoegtoepassing Application Builder voor Visual Studio 2013 om een C++-toepassing te maken die is gericht op Windows Embedded Compact 2013.
  • U schakelt de asynchrone uitzonderingsafhandeling in met behulp van de compilerswitch /EHa. Met deze switch kunnen zowel synchrone als SEH-asynchrone uitzonderingsafhandelingsmethoden (SEH) zowel synchrone als gestructureerde uitzonderingsafhandelingsmethoden (SEH) in dezelfde code worden gemengd.
  • U voert de gerelateerde code uit om SEH-uitzonderingen op te vangen.

In dit scenario worden SEH-uitzonderingen altijd opgevangen in de allereerste uitzonderingshandler, zelfs als deze is gefilterd op een synchrone C++-uitzondering. 

Het verwachte gedrag is dat SEH-uitzonderingen worden opgevangen door de ellipsuitzonderingshandler.

U voert bijvoorbeeld de volgende voorbeeldcode uit:klasse CMyEx
{
Openbare:
    CMyEx(int nParam) : m_nParam(nParam) { }
    int m_nParam;
};

void TestExceptions()
{
    niet
    {
        int a = 42;
        int b = 0;
        throw CMyEx(1);
        gooi 97;
        int c = a / b;
    }
    catch (const CMyEx &e)
    {
        wprintf(L"CMyEx-uitzondering gevangen (param=%d)!\n", e.m_nParam);
    }
    catch (...)
    {
        wprintf(L"Uitzondering van niet-gespecificeerd type dat door het beletselteken wordt gevangen!\n");
    }
} In dit voorbeeld bereikt u altijd de eerste catch-component wanneer de SEH-uitzondering (geheel getal delen door nul) optreedt in plaats van de beletseltekenhandler zoals verwacht.

Oplossing

Informatie over software-updates

De maandelijkse update voor Windows Embedded Compact 2013 (september 2015) is nu beschikbaar bij Microsoft. Als u deze maandelijkse update voor Windows Embedded Compact 2013 wilt downloaden, gaat u naar Microsoft OEM Online of MyOEM.

Vereisten

Deze update wordt alleen ondersteund als alle eerder uitgegeven updates voor dit product ook zijn geïnstalleerd.

Vereisten voor opnieuw starten

Nadat u deze update hebt toegepast, moet u een schone build van het hele platform uitvoeren. Gebruik hiervoor een van de volgende methoden:

  • Selecteer in het menu Bouwende optie Schone oplossing en selecteer vervolgens Oplossing bouwen.
  • Selecteer in het menu Bouwende optie Oplossing opnieuw opbouwen.

U hoeft de computer niet opnieuw op te starten nadat u deze software-update hebt toegepast.

Informatie over vervangende update

Deze update vervangt geen andere updates.

Bestandsinformatie

De Engelse versie van dit software-updatepakket heeft de bestandskenmerken (of latere bestandskenmerken) die in de volgende tabel worden vermeld. De datums en tijden voor deze bestanden worden weergegeven in Coordinated Universal Time (UTC). Wanneer u de bestandsinformatie bekijkt, wordt deze geconverteerd naar de lokale tijd. Als u het verschil tussen UTC en lokale tijd wilt vinden, gebruikt u het tabblad Tijdzone in het item Datum en tijd in Configuratiescherm.

Files die zijn opgenomen in dit updatepakket

Bestandsnaam Bestandsgrootte Datum Tijd Pad
Frame.cpp 34,133 13-nov-2014 23:06 Private\Winceos\Coreos\Core\Corelibc\Crtw32\Eh
Fullcrt.lib 30,027,378 09-sep-2015 09:17 Public\Common\Oak\Lib\X86\Checked
Fullcrt.lib 30,228,292 09-sep-2015 09:17 Public\Common\Oak\Lib\X86\Retail
Fullcrt.lib 28,759,836 09-sep-2015 09:16 Public\Common\Oak\Lib\X86\Debug
Fullcrt.lib 29,278,300 09-sep-2015 09:17 Public\Common\Oak\Lib\Armv7\Checked
Fullcrt.lib 29,566,730 09-sep-2015 09:17 Public\Common\Oak\Lib\Armv7\Retail
Fullcrt.lib 33,139,560 09-sep-2015 09:16 Public\Common\Oak\Lib\Armv7\Debug
Msvcr110d.dll 1,339,952 08-sep-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.dll 754,224 08-sep-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.map 1,287,579 08-sep-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.rel 528,834 08-sep-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.map 788,986 08-sep-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.rel 242,169 08-sep-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.dll 1,145,312 08-sep-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.dll 539,608 08-sep-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110d.map 2,714,275 08-sep-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110d.rel 215,924 08-sep-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.map 1,258,317 08-sep-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.rel 122,167 08-sep-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm

      

Meer informatie

Meer informatie over de terminologie die Microsoft gebruikt om software-updates te beschrijven.