LABOJUMS: SEH izņēmumus uztver nepareizs izņēmumu apdarinātājs, ja WEC 2013 ir iespējota asinhronā izņēmumu apstrāde

Šajā rakstā ir aprakstīta problēma, kad SEH izņēmumus uztver nepareizs Windows Embedded Compact 2013 apdarinātājs. Ir pieejams atjauninājums šīs problēmas novēršanai. Pirms šī atjauninājuma instalēšanas ir jāinstalē visi iepriekš izdotie šī produkta atjauninājumi.

Pazīmes

Apsveriet šādu scenāriju:

  • Jūs izmantojat lietojumprogrammu veidotāja spraudni, kas paredzēts rīku Visual Studio 2013, lai izveidotu C++ lietojumprogrammu, kas paredzēta operētājsistēmai Windows Embedded Compact 2013.
  • Asinhrono izņēmumu apstrādi var iespējot, izmantojot kompilatora slēdzi "/EHa". Šis slēdzis ļauj vienā kodā sajaukt gan C++ sinhronās, gan strukturētās izņēmumu apstrādes (SEH) asinhronās izņēmumu apstrādes metodes.
  • Izpildiet saistīto kodu, lai uztvertu SEH izņēmumus.

Šajā scenārijā SEH izņēmumi vienmēr tiek fiksēti pašā pirmajā izņēmumu apdarinātājā pat tad, ja tas ir filtrēts C++ sinhronajam izņēmumam. 

Paredzamā darbība ir SEH izņēmumus, ko uztver daudzpunktes izņēmumu apdarinātājs.

Piemēram, palaižat šādu parauga kodu:klase CMyEx
{
Publiska:
    CMyEx(int nParam) : m_nParam(nParam) { }
    int m_nParam;
};

void TestExceptions()
{
    mēģiniet
    {
        int a = 42;
        int b = 0;
        metiens CMyEx(1);
        metiens 97;
        int c = a / b;
    }
    catch (const CMyEx &e)
    {
        wprintf(L"CMyEx izņēmums noķerts (parametrs=%d)!\n", e.m_nParam);
    }
    nozveja (...)
    {
        wprintf(L"Izņēmums nenorādītam tipam, ko pārņem daudzpunktes klauzula!\n");
    }
} Šajā piemērā jūs vienmēr sasniedzat pirmo noķeršanas klauzulu, kad SEH izņēmums (vesels skaitlis dalīt ar nulli) rodas, nevis daudzpunktes apdarinātājs, kā paredzēts.

Risinājums

Informācija par programmatūras atjaunināšanu

Windows Embedded Compact 2013. gada ikmēneša atjauninājums (2015. gada septembris) tagad ir pieejams no Microsoft. Lai lejupielādētu šo Windows Embedded Compact 2013 ikmēneša atjauninājumu, dodieties uz Microsoft OEM Online vai MyOEM.

Priekšnosacījumi

Šis atjauninājums tiek atbalstīts tikai tad, ja ir instalēti arī visi iepriekš izdotie šī produkta atjauninājumi.

Restartēšanas prasības

Pēc šī atjauninājuma lietošanas ir jāveic visas platformas tīrs būvējums. Šajā nolūkā izmantojiet kādu no šīm metodēm:

  • Izvēlnē Būvējums atlasiet Tīrs risinājums un pēc tam atlasiet Veidot risinājumu.
  • Izvēlnē Būvējums atlasiet Pārbūvēt risinājumu.

Pēc šī programmatūras atjauninājuma lietošanas nav jārestartē dators.

Informācija par atjauninājuma aizstāšanu

Šis atjauninājums neaizstāj citus atjauninājumus.

Informācija par failu

Šīs programmatūras atjauninājumu pakotnes angļu valodas versijā ir faila atribūti (vai vēlāki faila atribūti), kas norādīti tālāk esošajā tabulā. Šo failu datums un laiks ir norādīts atbilstoši universālajam koordinētajam laikam (UTC). Kad skatāt faila informāciju, tā tiek pārvērsta par vietējo laiku. Lai uzzinātu atšķirību starp UTC un vietējo laiku, izmantojiet cilni Laika josla vadības paneļa vienumā Datums un laiks.

Files that are included in this update package

Faila nosaukums Faila lielums Datums Laiks Ceļš
Frame.cpp 34,133 2014. gada 13. novembris 23:06 Private\Winceos\Coreos\Core\Corelibc\Crtw32\Eh
Fullcrt.lib 30,027,378 2015. gada 9. septembris 09:17 Public\Common\Oak\Lib\X86\Checked
Fullcrt.lib 30,228,292 2015. gada 9. septembris 09:17 Public\Common\Oak\Lib\X86\Retail
Fullcrt.lib 28,759,836 2015. gada 9. septembris 09:16 Public\Common\Oak\Lib\X86\Debug
Fullcrt.lib 29,278,300 2015. gada 9. septembris 09:17 Public\Common\Oak\Lib\Armv7\Checked
Fullcrt.lib 29,566,730 2015. gada 9. septembris 09:17 Public\Common\Oak\Lib\Armv7\Retail
Fullcrt.lib 33,139,560 2015. gada 9. septembris 09:16 Public\Common\Oak\Lib\Armv7\Debug
Msvcr110d.dll 1,339,952 2015. gada 8. septembris 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.dll 754,224 2015. gada 8. septembris 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.map 1,287,579 2015. gada 8. septembris 05:26 Public\Common\Sdk\Crt\Bin\X86
msvcr110d.rel 528,834 2015. gada 8. septembris 05:26 Public\Common\Sdk\Crt\Bin\X86
msvcr110.map 788,986 2015. gada 8. septembris 05:26 Public\Common\Sdk\Crt\Bin\X86
msvcr110.rel 242,169 2015. gada 8. septembris 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.dll 1,145,312 2015. gada 8. septembris 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.dll 539,608 2015. gada 8. septembris 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110d.map 2,714,275 2015. gada 8. septembris 05:26 Public\Common\Sdk\Crt\Bin\Arm
msvcr110d.rel 215,924 2015. gada 8. septembris 05:26 Public\Common\Sdk\Crt\Bin\Arm
msvcr110.map 1,258,317 2015. gada 8. septembris 05:26 Public\Common\Sdk\Crt\Bin\Arm
msvcr110.rel 122,167 2015. gada 8. septembris 05:26 Public\Common\Sdk\Crt\Bin\Arm

      

Atsauces

Uzziniet par terminoloģiju, ko Microsoft izmanto, lai aprakstītu programmatūras atjauninājumus.