RJEŠENJE: SEH iznimke prepoznaje pogrešan rukovatelj iznimkama kada je u WEC 2013 omogućeno asinkrono rukovanje iznimkama

U ovom se članku opisuje problem u kojem pogrešan rukovatelj u sustavu Windows Embedded Compact 2013 prepoznaje SEH iznimke. Dostupno je ažuriranje koje rješava taj problem. Prije nego što instalirate ovo ažuriranje, sva prethodno izdana ažuriranja za proizvod moraju biti instalirana.

Simptomi

Razmotrite sljedeći scenarij:

  • Pomoću programskog priključka Sastavljač aplikacija za Visual Studio 2013 stvorite aplikaciju u obliku C++ koja cilja na Windows Embedded Compact 2013.
  • Rukovanje asinkronim iznimkama omogućuje se pomoću prekidača kompilatora "/EHa". Ovaj prekidač omogućuje miješanje metoda rukovanja sinronim iznimkama za C++ i strukturirano rukovanje iznimkama (SEH) u isti kod.
  • Pokrećete povezani kod da biste uhvatili SEH iznimke.

U tom se scenariju SEH iznimke uvijek uhvaćaju u prvom rukovatelju iznimaka, čak i ako je filtriran za sinkronu iznimku C++. 

Očekivano ponašanje je da rukovatelj iznimkama trotočja uhvati SEH iznimke.

Na primjer, izvršavate sljedeći ogledni kod:class CMyEx
{
Javno:
    CMyEx(int nParam) : m_nParam(nParam) { }
    int m_nParam;
};

poništi TestExceptions()
{
    isprobati;pokušati
    {
        int a = 42;
        int b = 0;
        baci CMyEx(1);
        baci 97;
        int c = a / b;
    }
    hvatanje (konst CMyEx &e)
    {
        wprintf(L"CMyEx exception caught (param=%d)!\n", e.m_nParam);
    }
    Ulov (...)
    {
        wprintf(L"Exception of unspecified type caught by ellipsis clause!\n");
    }
} U ovom primjeru uvijek pogađate prvi uvjet catcha kada se pojavi SEH iznimka (dijeljenje cijelog broja s nulom) umjesto rukovatelja trotočjem kao što je očekivano.

Rješenje

Informacije o softverskim ažuriranjima

Mjesečno ažuriranje za Windows Embedded Compact 2013 (rujan 2015.) sada je dostupno od Microsofta. Da biste preuzeli ovo mjesečno ažuriranje za Windows Embedded Compact 2013, posjetite Microsoft OEM Online ili MyOEM.

Preduvjeti

Ovo je ažuriranje podržano samo ako su instalirana sva prethodno izdana ažuriranja za ovaj proizvod.

Potrebno je ponovno pokretanje

Kada primijenite ovo ažuriranje, morate izvesti čistu međuverziju cijele platforme. To učinite na jedan od sljedećih načina:

  • Na izborniku Međuverzija odaberite Očisti rješenje, a zatim odaberite Međuverzija rješenja.
  • Na izborniku Međuverzija odaberite Obnovi rješenje.

Ne morate ponovno pokrenuti računalo nakon primjene ovog ažuriranja softvera.

Informacije o zamjeni ažuriranja

Ovo ažuriranje ne zamjenjuje nijedno drugo ažuriranje.

Podaci o datoteci

Engleska verzija ovog paketa softverskih ažuriranja ima atribute datoteka (ili novije atribute datoteka) koji su navedeni u sljedećoj tablici. Datumi i vremena tih datoteka navedeni su u koordiniranom univerzalnom vremenu (UTC). Kada pregledavate informacije o datoteci, pretvaraju se u lokalno vrijeme. Da biste pronašli razliku između UTC-a i lokalnog vremena, koristite karticu Vremenska zona u stavci Datum i vrijeme na Upravljačka ploča.

Files koje su obuhvaćene ovim paketom ažuriranja

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

      

Reference

Saznajte više o terminologiji koju Microsoft upotrebljava za opisivanje softverskih ažuriranja.