KORJAUS: SEH-poikkeukset jäävät väärän poikkeuskäsittelyn jälkeen, kun asynkroninen poikkeusten käsittely on käytössä WEC 2013:ssa

Tässä artikkelissa kuvataan ongelma, jossa seh-poikkeukset jäävät väärän käsittelijän kiinni Windows Embedded Compact 2013:ssa. Ongelman voi korjata päivittämällä. Ennen tämän päivityksen asentamista kaikki tähän tuotteeseen aiemmin julkaistut päivitykset on asennettava.

Ongelman ilmenemistapa

Mieti seuraavaa tilannetta:

  • Visual Studio 2013:n Application Builder -laajennuksen avulla voit luoda C++-sovelluksen, jonka kohteena on Windows Embedded Compact 2013.
  • Voit ottaa asynkronisen poikkeusten käsittelyn käyttöön /EHa-kääntäjävalitsimen avulla. Tämä valitsin sallii sekä C++-synkronointipoikkeamien käsittelyn (SEH) asynkronisten poikkeusten käsittelymenetelmien sekoittamisen samaan koodiin.
  • Suoritat liittyvän koodin SEH-poikkeusten saamiseksi.

Tässä skenaariossa SEH-poikkeukset jäävät aina ensimmäiseen poikkeuskäsittelijään, vaikka se suodatetaan C++ -synkronointipoikkeuksen mukaan. 

Odotettu toiminta on SEH-poikkeuksia, jotka ellipsipoikkeuksen käsittelijä saa.

Suoritat esimerkiksi seuraavan esimerkkikoodin: luokan CMyEx
{
Yleiset:
    CMyEx(int nParam) : m_nParam(nParam) { }
    int m_nParam;
};

void TestExceptions()
{
    yrittämistä
    {
        int a = 42;
        int b = 0;
        heittää CMyEx(1);
        heitä 97;
        int c = a / b;
    }
    catch (const CMyEx &e)
    {
        wprintf(L"CMyEx poikkeus pyydetty (param=%d)!\n", e.m_nParam);
    }
    catch (...)
    {
        wprintf(L"Poikkeus määrittämättömästä tyypistä, joka on pyydetty ellipsis-lauseella!\n");
    }
} Tässä esimerkissä saavutat aina ensimmäisen saalislausekkeen, kun SEH-poikkeus (kokonaislukujako nollalla) tapahtuu odotetun ellipsikäsittelijän sijaan.

Ratkaisu

Ohjelmistopäivitystiedot

Windows Embedded Compact 2013:n kuukausittainen päivitys (syyskuu 2015) on nyt saatavilla Microsoftilta. Jos haluat ladata tämän Kuukausittaisen Windows Embedded Compact 2013 -päivityksen, siirry Microsoft OEM Onlineen tai MyOEM:iin.

Edellytykset

Tämä päivitys on tuettu vain, jos kaikki tähän tuotteeseen aiemmin julkaistut päivitykset on myös asennettu.

Uudelleenkäynnistystarve

Kun olet asentanut tämän päivityksen, sinun on suoritettava koko ympäristön puhdas koontiversio. Voit tehdä tämän jollakin seuraavista tavoista:

  • Valitse Muodosta-valikossaPuhdista ratkaisu ja valitse sitten Muodosta ratkaisu.
  • Valitse Muodosta-valikossaMuodosta ratkaisu uudelleen.

Sinun ei tarvitse käynnistää tietokonetta uudelleen tämän ohjelmistopäivityksen asentamisen jälkeen.

Päivityksen korvaustiedot

Tämä päivitys ei korvaa muita päivityksiä.

Tiedoston tiedot

Tämän ohjelmistopäivityspaketin englanninkielisessä versiossa on seuraavassa taulukossa luetellut tiedostomääritteet (tai uudemmat tiedostomääritteet). Näiden tiedostojen päivämäärät ja kellonajat on lueteltu UTC (Coordinated Universal Time) -luettelossa. Kun tarkastelet tiedoston tietoja, ne muunnetaan paikalliseksi ajaksi. Voit selvittää UTC:n ja paikallisen ajan välisen eron Ohjauspaneeli päivämäärä- ja aikakohteenAikavyöhyke-välilehdessä.

Files, jotka sisältyvät tähän päivityspakettiin

Tiedoston nimi Tiedoston koko Päivämäärä Aika Polku
Frame.cpp 34,133 13.11.2014 23:06 Private\Winceos\Coreos\Core\Corelibc\Crtw32\Eh
Fullcrt.lib 30,027,378 09-syys-2015 09:17 Public\Common\Oak\Lib\X86\Checked
Fullcrt.lib 30,228,292 09-syys-2015 09:17 Public\Common\Oak\Lib\X86\Retail
Fullcrt.lib 28,759,836 09-syys-2015 09:16 Julkinen\Common\Oak\Lib\X86\Debug
Fullcrt.lib 29,278,300 09-syys-2015 09:17 Public\Common\Oak\Lib\Armv7\Checked
Fullcrt.lib 29,566,730 09-syys-2015 09:17 Public\Common\Oak\Lib\Armv7\Retail
Fullcrt.lib 33,139,560 09-syys-2015 09:16 Julkinen\Common\Oak\Lib\Armv7\Debug
Msvcr110d.dll 1,339,952 08-syys-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.dll 754,224 08-syys-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.map 1,287,579 08-syys-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.rel 528,834 08-syys-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.map 788,986 08-syys-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.rel 242,169 08-syys-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.dll 1,145,312 08-syys-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.dll 539,608 08-syys-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110d.map 2,714,275 08-syys-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110d.rel 215,924 08-syys-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.map 1,258,317 08-syys-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.rel 122,167 08-syys-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm

      

Viitteet

Lue tietoja Microsoftin ohjelmistopäivitystensä kuvaamiseen käyttämästä sanastosta.