DÜZELTME: WEC 2013'te zaman uyumsuz özel durum işleme etkinleştirildiğinde SEH özel durumları yanlış özel durum işleyicisi tarafından yakalanıyor

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.