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.