Bu makalede, SEH özel durumlarının Windows Embedded Compact 2013'te yanlış işleyici tarafından yakalanması sorunu açıklanmaktadır. Bu sorunu çözmek için bir güncelleştirme mevcut. Bu güncelleştirmeyi yüklemeden önce, bu ürün için daha önce yayımlanmış tüm güncelleştirmelerin yüklenmesi gerekir.
Belirtiler
Aşağıdaki senaryoyu ele alalım:
- Windows Embedded Compact 2013'ü hedefleyen bir C++ uygulaması oluşturmak için Visual Studio 2013 için Application Builder eklentisini kullanırsınız.
- "/EHa" derleyici anahtarını kullanarak zaman uyumsuz özel durum işlemeyi etkinleştirirsiniz. Bu anahtar, hem C++ zaman uyumlu hem de yapılandırılmış özel durum işleme (SEH) zaman uyumsuz özel durum işleme yöntemlerinin aynı kodda karıştırılmasına olanak tanır.
- SEH özel durumlarını yakalamak için ilgili kodu çalıştırırsınız.
Bu senaryoda, SEH özel durumları C++ zaman uyumlu özel durumu için filtrelenmiş olsa bile her zaman ilk özel durum işleyicisinde yakalanır.
Beklenen davranış, SEH özel durumlarının üç nokta özel durum işleyicisi tarafından yakalanmasıdır.
Örneğin, aşağıdaki örnek kodu çalıştırırsınız:CMyEx sınıfı
{
Genel:
CMyEx(int nParam) : m_nParam(nParam) { }
int m_nParam;
};
void TestExceptions()
{
deneyin
{
int a = 42;
int b = 0;
CMyEx(1) atmak;
97 atmak;
int c = a / b;
}
catch (const CMyEx &e)
{
wprintf(L"CMyEx özel durumu yakalandı (param=%d)!\n", e.m_nParam);
}
yakalamak (...)
{
wprintf(L"Üç nokta yan tümcesi tarafından yakalanan belirtilmemiş tür özel durumu!\n");
}
} Bu örnekte, beklendiği gibi üç nokta işleyicisi yerine SEH özel durumu (sıfıra tam sayı bölme) oluştuğunda her zaman ilk catch yan tümcesine basarsınız.
Çözüm
Yazılım güncelleştirme bilgileri
Windows Embedded Compact 2013 Aylık Güncelleştirmesi (Eylül 2015) artık Microsoft tarafından edinilebilir. Bu Windows Embedded Compact 2013 aylık güncelleştirmesini indirmek için Microsoft OEM Online veya MyOEM'e gidin.
Önkoşullar
Bu güncelleştirme, yalnızca bu ürün için daha önce yayımlanan tüm güncelleştirmeler de yüklenmişse desteklenir.
Yeniden başlatma gereksinimi
Bu güncelleştirmeyi uyguladıktan sonra, tüm platform için temiz bir derleme gerçekleştirmelisiniz. Bunu yapmak için aşağıdaki yöntemlerden birini kullanın:
- Build (Oluştur) menüsünde Clean Solution'ı (Çözümü Temizle) seçin ve ardından Build Solution'ı seçin.
- Derle menüsünde Çözümü Yeniden Oluştur'u seçin.
Bu yazılım güncelleştirmesini uyguladıktan sonra bilgisayarınızı yeniden başlatmanız gerekmez.
Güncelleştirme değiştirme bilgileri
Bu güncelleştirme, başka güncelleştirmelerin yerine geçmez.
Dosya bilgileri
Bu yazılım güncelleştirme paketinin İngilizce sürümü aşağıdaki tabloda listelenen dosya özniteliklerine (veya daha sonraki dosya özniteliklerine) sahiptir. Bu dosyaların tarihleri ve saatleri Eşgüdümlü Evrensel Saat'te (UTC) listelenmiştir. Dosya bilgilerini görüntülediğinizde yerel saate dönüştürülür. UTC ile yerel saat arasındaki farkı bulmak için Denetim Masası'deki Tarih ve Saat öğesinde Saat Dilimi sekmesini kullanın.
FilesFiles bu güncelleme paketine dahil olan
| Dosya adı | Dosya boyutu | Tarih | Saat | Yol |
|---|---|---|---|---|
| Frame.cpp | 34,133 | 13 Kasım 2014 | 23:06 | Private\Winceos\Coreos\Core\Corelibc\Crtw32\Eh |
| Fullcrt.lib | 30,027,378 | 09 Eylül 2015 | 09:17 | Public\Common\Oak\Lib\X86\Checked |
| Fullcrt.lib | 30,228,292 | 09 Eylül 2015 | 09:17 | Public\Common\Oak\Lib\X86\Retail |
| Fullcrt.lib | 28,759,836 | 09 Eylül 2015 | 09:16 | Public\Common\Oak\Lib\X86\Debug |
| Fullcrt.lib | 29,278,300 | 09 Eylül 2015 | 09:17 | Public\Common\Oak\Lib\Armv7\Checked |
| Fullcrt.lib | 29,566,730 | 09 Eylül 2015 | 09:17 | Public\Common\Oak\Lib\Armv7\Retail |
| Fullcrt.lib | 33,139,560 | 09 Eylül 2015 | 09:16 | Public\Common\Oak\Lib\Armv7\Debug |
| Msvcr110d.dll | 1,339,952 | 08-Eylül-2015 | 05:26 | public\common\sdk\crt\bin\x86 |
| Msvcr110.dll | 754,224 | 08-Eylül-2015 | 05:26 | public\common\sdk\crt\bin\x86 |
| Msvcr110d.map | 1,287,579 | 08-Eylül-2015 | 05:26 | public\common\sdk\crt\bin\x86 |
| Msvcr110d.rel | 528,834 | 08-Eylül-2015 | 05:26 | public\common\sdk\crt\bin\x86 |
| Msvcr110.map | 788,986 | 08-Eylül-2015 | 05:26 | public\common\sdk\crt\bin\x86 |
| Msvcr110.rel | 242,169 | 08-Eylül-2015 | 05:26 | public\common\sdk\crt\bin\x86 |
| Msvcr110d.dll | 1,145,312 | 08-Eylül-2015 | 05:26 | public\common\sdk\Crt\bin\Arm |
| Msvcr110.dll | 539,608 | 08-Eylül-2015 | 05:26 | public\common\sdk\Crt\bin\Arm |
| Msvcr110d.map | 2,714,275 | 08-Eylül-2015 | 05:26 | public\common\sdk\Crt\bin\Arm |
| Msvcr110d.rel | 215,924 | 08-Eylül-2015 | 05:26 | public\common\sdk\Crt\bin\Arm |
| Msvcr110.map | 1,258,317 | 08-Eylül-2015 | 05:26 | public\common\sdk\Crt\bin\Arm |
| Msvcr110.rel | 122,167 | 08-Eylül-2015 | 05:26 | public\common\sdk\Crt\bin\Arm |
Başvurular
Microsoft'un yazılım güncelleştirmelerini tanımlamak için kullandığı terminoloji hakkında bilgi edinin.