In diesem Artikel wird ein Problem beschrieben, bei dem SEH-Ausnahmen von einem falschen Handler in Windows Embedded Compact 2013 abgefangen werden. Ein Update ist verfügbar, um dieses Problem zu beheben. Vor der Installation dieses Updates müssen alle zuvor veröffentlichten Updates für dieses Produkt ebenfalls installiert werden.
Symptome
Nehmen Sie folgendes Szenario an:
- Sie verwenden das Application Builder-Plug-In für Visual Studio 2013, um eine C++-Anwendung für Windows Embedded Compact 2013 zu erstellen.
- Sie aktivieren die asynchrone Ausnahmebehandlung mithilfe des Compilerschalters "/EHa". Mit diesem Schalter können sowohl die synchrone als auch die strukturierte Ausnahmebehandlung in C++ (SEH) asynchrone Ausnahmebehandlungsmethoden im selben Code gemischt werden.
- Sie führen den zugehörigen Code aus, um SEH-Ausnahmen abzufangen.
In diesem Szenario werden SEH-Ausnahmen immer im ersten Ausnahmehandler abgefangen, auch wenn er nach einer synchronen C++-Ausnahme gefiltert wird.
Das erwartete Verhalten sind SEH-Ausnahmen, die vom Ausnahmehandler mit den Auslassungspunkten abgefangen werden.
Sie führen z. B. den folgenden Beispielcode aus:Klasse CMyEx
{
Öffentlich:
CMyEx(int nParam) : m_nParam(nParam) { }
int m_nParam;
};
void TestExceptions()
{
Versuch
{
int a = 42;
int b = 0;
auslösen CMyEx(1);
werfen 97;
int c = a / b;
}
catch (const CMyEx &e)
{
wprintf(L"CMyEx exception caught (param=%d)!\n", e.m_nParam);
}
Catch (...)
{
wprintf(L"Ausnahme des nicht angegebenen Typs, der von der Ellipse-Klausel abgefangen wurde!\n");
}
} In diesem Beispiel treffen Sie immer die erste catch-Klausel, wenn die SEH-Ausnahme (ganzzahlige Division durch Null) anstelle des Ellipsenhandlers wie erwartet auftritt.
Lösung
Informationen zu Softwareupdates
Das monatliche Windows Embedded Compact 2013-Update (September 2015) ist jetzt bei Microsoft verfügbar. Um dieses monatliche Windows Embedded Compact 2013-Update herunterzuladen, wechseln Sie zu Microsoft OEM Online oder MyOEM.
Voraussetzungen
Dieses Update wird nur unterstützt, wenn alle zuvor veröffentlichten Updates für dieses Produkt ebenfalls installiert wurden.
Neustartanforderung
Nach der Installation dieses Updates müssen Sie die gesamte Plattform neu erstellen. Wenden Sie hierzu eine der folgenden Methoden an:
- Klicken Sie im Menü Build (Erstellen) auf Clean Solution (Neue Lösung) und dann auf Build Solution (Lösung erstellen).
- Klicken Sie im Menü Build (Erstellen) auf Rebuild Solution (Lösung neu erstellen).
Sie müssen den Computer nicht neu starten, nachdem Sie dieses Softwareupdate installiert haben.
Ersetzte Updates
Dieses Update ersetzt keine anderen Updates.
Dateiinformationen
Die englische Version dieses Softwareupdatepakets weist die in der nachstehenden Tabelle aufgelisteten Dateiattribute (oder höher) auf. Datums- und Uhrzeitangaben für diese Dateien sind in der koordinierten Weltzeit (UTC) angegeben. Wenn Sie die Dateiinformationen anzeigen, werden sie in die Ortszeit konvertiert. Den Unterschied zwischen UTC- und Ortszeit können Sie in der Systemsteuerung unter Datum und Uhrzeit mithilfe der Angaben auf der Registerkarte Zeitzone ermitteln.
Dateien in diesem Update-Paket
| Dateiname | Dateigröße | Datum | Zeit | Pfad |
|---|---|---|---|---|
| Frame.cpp | 34,133 | 13-Nov-2014 | 01:23:06 | Private\Winceos\Coreos\Core\Corelibc\Crtw32\Eh |
| Fullcrt.lib | 30,027,378 | 09.09.2015 | 09:17 | Public\Common\Oak\Lib\X86\Checked |
| Fullcrt.lib | 30,228,292 | 09.09.2015 | 09:17 | Public\Common\Oak\Lib\X86\Retail |
| Fullcrt.lib | 28,759,836 | 09.09.2015 | 16:09 | Public\Common\Oak\Lib\X86\Debug |
| Fullcrt.lib | 29,278,300 | 09.09.2015 | 09:17 | Public\Common\Oak\Lib\Armv7\Checked |
| Fullcrt.lib | 29,566,730 | 09.09.2015 | 09:17 | Public\Common\Oak\Lib\Armv7\Retail |
| Fullcrt.lib | 33,139,560 | 09.09.2015 | 16:09 | Public\Common\Oak\Lib\Armv7\Debug |
| Msvcr110d.dll | 1,339,952 | 08.09.2015 | 05:26 | Public\Common\Sdk\Crt\Bin\X86 |
| Msvcr110.dll | 754,224 | 08.09.2015 | 05:26 | Public\Common\Sdk\Crt\Bin\X86 |
| Msvcr110d.map | 1,287,579 | 08.09.2015 | 05:26 | Public\Common\Sdk\Crt\Bin\X86 |
| Msvcr110d.rel | 528,834 | 08.09.2015 | 05:26 | Public\Common\Sdk\Crt\Bin\X86 |
| Msvcr110.map | 788,986 | 08.09.2015 | 05:26 | Public\Common\Sdk\Crt\Bin\X86 |
| Msvcr110.rel | 242,169 | 08.09.2015 | 05:26 | Public\Common\Sdk\Crt\Bin\X86 |
| Msvcr110d.dll | 1,145,312 | 08.09.2015 | 05:26 | Public\Common\Sdk\Crt\Bin\Arm |
| Msvcr110.dll | 539,608 | 08.09.2015 | 05:26 | Public\Common\Sdk\Crt\Bin\Arm |
| Msvcr110d.map | 2,714,275 | 08.09.2015 | 05:26 | Public\Common\Sdk\Crt\Bin\Arm |
| Msvcr110d.rel | 215,924 | 08.09.2015 | 05:26 | Public\Common\Sdk\Crt\Bin\Arm |
| Msvcr110.map | 1,258,317 | 08.09.2015 | 05:26 | Public\Common\Sdk\Crt\Bin\Arm |
| Msvcr110.rel | 122,167 | 08.09.2015 | 05:26 | Public\Common\Sdk\Crt\Bin\Arm |
Referenzmaterial
Informieren Sie sich über die Terminologie, die Microsoft zum Beschreiben von Softwareupdates verwendet.