ÅTGÄRDAT: SEH-undantag fångas av fel undantagshanterare när asynkron undantagshantering är aktiverad i WEC 2013

I den här artikeln beskrivs ett problem där SEH-undantag fångas av fel hanterare i Windows Embedded Compact 2013. Det finns en uppdatering för att åtgärda problemet. Innan du installerar den här uppdateringen måste alla tidigare uppdateringar för den här produkten installeras.

Symptom

Tänk dig följande scenario:

  • Du använder plugin-programmet Application Builder för Visual Studio 2013 för att skapa ett C++-program som riktar sig till Windows Embedded Compact 2013.
  • Du aktiverar asynkron undantagshantering med hjälp av kompileraren "/EHa". Med den här växeln kan både C++-synkron och strukturerad undantagshantering (SEH) blandas asynkrona undantagshanteringsmetoder i samma kod.
  • Du kör den relaterade koden för att fånga upp SEH-undantag.

I det här scenariot fastnar SEH-undantag alltid i den allra första undantagshanteraren även om det filtreras för ett synkront C++-undantag. 

Det förväntade beteendet är SEH-undantag som fångas av ellips undantagshanteraren.

Du kan till exempel köra följande exempelkod:klass CMyEx
{
Offentliga:
    CMyEx(int nParam) : m_nParam(nParam) { }
    int m_nParam;
};

void TestExceptions()
{
    Prova
    {
        int a = 42;
        int b = 0;
        kasta CMyEx(1);
        kasta 97;
        int c = a / b;
    }
    catch (const CMyEx &e)
    {
        wprintf(L"CMyEx exception caught (param=%d)!\n", e.m_nParam);
    }
    fånga (...)
    {
        wprintf(L"Exception of unspecified type caught by ellipsis clause!\n");
    }
} I det här exemplet träffar du alltid den första catch-satsen när SEH-undantaget (heltalsdelning med noll) förekommer i stället för ellipshanteraren som förväntat.

Lösning

Information om programvaruuppdateringar

Månadsuppdateringen för Windows Embedded Compact 2013 (september 2015) är nu tillgänglig från Microsoft. Om du vill ladda ned den här månatliga uppdateringen för Windows Embedded Compact 2013 går du till Microsoft OEM Online eller MyOEM.

Krav

Den här uppdateringen stöds endast om alla tidigare uppdateringar för den här produkten också har installerats.

Krav på omstart

När du har installerat den här uppdateringen måste du göra en ren version av hela plattformen. Det gör du på något av följande sätt:

  • På menyn Skapa väljer du Rensa lösning och sedan Skapa lösning.
  • På menyn Skapa väljer du Återskapa lösning.

Du behöver inte starta om datorn när du har installerat den här programuppdateringen.

Ersättningsinformation om uppdateringen

Den här uppdateringen ersätter inga andra uppdateringar.

Filinformation

Den engelska versionen av det här programuppdateringspaketet har filattributen (eller senare filattribut) som visas i följande tabell. Datumen och tiderna för dessa filer anges i Coordinated Universal Time (UTC). När du visar filinformationen konverteras den till lokal tid. Om du vill se skillnaden mellan UTC och lokal tid använder du fliken Tidszon i objektet Datum och tid i Kontrollpanelen.

Files som ingår i det här uppdateringspaketet

Filnamn Filstorlek Datum Tid Sökväg
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

      

Referenser

Läs om den terminologi som Microsoft använder för att beskriva programuppdateringar.