CORRECTIF : Les exceptions SEH sont interceptées par un gestionnaire d’exceptions incorrect lorsque la gestion asynchrone des exceptions est activée dans WEC 2013

S’applique à
Windows Embedded Compact 2013

Cet article décrit un problème dans lequel les exceptions SEH sont interceptées par un gestionnaire incorrect dans Windows Embedded Compact 2013. Une mise à jour est disponible pour résoudre ce problème. Avant l'installation de cette mise à jour, toutes les mises à jour précédemment publiées pour ce produit doivent être installées.

Symptômes

Prenons le scénario suivant :

  • Vous utilisez le plug-in Application Builder pour Visual Studio 2013 afin de créer une application C++ qui cible Windows Embedded Compact 2013.
  • Vous activez la gestion asynchrone des exceptions à l’aide du commutateur de compilateur « /EHa ». Ce commutateur permet à la fois aux méthodes de gestion asynchrone des exceptions synchrones C++ et de gestion structurée des exceptions (SEH) d’être mélangées dans le même code.
  • Vous exécutez le code associé pour intercepter les exceptions SEH.

Dans ce scénario, les exceptions SEH sont toujours interceptées dans le tout premier gestionnaire d’exceptions, même s’il est filtré pour une exception synchrone C++. 

Le comportement attendu est les exceptions SEH interceptées par le gestionnaire d’exceptions d’ellipses.

Par exemple, vous exécutez l’exemple de code suivant : classe CMyEx
{
Public:
    CMyEx(int nParam) : m_nParam(nParam) { }
    int m_nParam ;
};

void TestExceptions()
{
    essai
    {
        int a = 42 ;
        int b = 0 ;
        throw CMyEx(1) ;
        lancer 97 ;
        int c = a / b ;
    }
    catch (const CMyEx &e)
    {
        wprintf(L"Exception CMyEx interceptée (param= %d) !\n », e.m_nParam) ;
    }
    catch (...)
    {
        wprintf(L"Exception de type non spécifié intercepté par une clause de points de suspension !\n ») ;
    }
} Dans cet exemple, vous atteignez toujours la première clause catch lorsque l’exception SEH (division entière par zéro) se produit au lieu du gestionnaire de points de suspension comme prévu.

Résolution

Informations sur la mise à jour logicielle

La mise à jour mensuelle Windows Embedded Compact 2013 (septembre 2015) est désormais disponible auprès de Microsoft. Pour télécharger cette mise à jour mensuelle Windows Embedded Compact 2013, accédez à Microsoft OEM Online ou MyOEM.

Configuration requise

Cette mise à jour n'est prise en charge que si toutes les mises à jour précédemment publiées pour ce produit ont été installées.

Nécessité de redémarrer

Après avoir appliqué cette mise à jour, vous devez effectuer une génération complète de l'intégralité de la plateforme. Pour cela, appliquez l’une des méthodes suivantes :

  • Dans le menu Générer, sélectionnez Nettoyer la solution, puis Générer la solution.
  • Dans le menu Générer, sélectionnez Régénérer la solution.

Vous ne devez pas redémarrer l'ordinateur après avoir appliqué cette mise à jour logicielle.

Informations sur le remplacement de la mise à jour

Cette mise à jour n'en remplace aucune autre.

Informations sur le fichier

Les attributs de fichier de la version anglaise de ce package de mise à jour logicielle (ou ceux d'une version ultérieure) sont répertoriés dans le tableau suivant. Les date et heure de création de ces fichiers sont exprimées en temps universel coordonné (UTC). Lorsque vous affichez les informations du fichier, elles sont converties en heure locale. Pour connaître le décalage entre l’heure UTC et l’heure locale, utilisez l’onglet Fuseau horaire dans l’élément Date et heure du Panneau de configuration.

Fichiers inclus dans ce package de mise à jour

Nom de fichier Taille du fichier Date Heure Chemin d’accès
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 16:09 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 16:09 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

      

Références

En savoir plus à propos de la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.