修正:當 WEC 2013 啟用非同步異常處理時,SEH 例外被錯誤的例外處理程式捕捉到

本文描述了一個問題,即 Windows Embedded Compact 2013 中錯誤的處理器捕捉到 SEH 例外。 現在有更新可以修正這個問題。 安裝這個更新之前,必須先安裝先前為這個產品發行的所有更新。

症狀

請考慮以下案例:

  • 你可以使用 Visual Studio 2013 的應用程式建構器外掛,來建立一個針對 Windows Embedded Compact 2013 的 C++ 應用程式。
  • 你可以透過「/EHa」編譯器切換器來啟用非同步異常處理。 此切換允許 C++ 同步與結構化異常處理 (SEH) 非同步異常處理方法混合於同一程式碼中。
  • 你執行相關程式碼來捕捉 SEH 例外。

在這種情況下,SEH 例外總是被第一個例外處理器攔截,即使它被過濾成 C++ 同步例外。 

預期的行為是省略例外處理器捕捉 SEH 例外。

例如,你執行以下範例程式碼:class CMyEx
{
公開:
    CMyEx (int nParam) : m_nParam (nParam) { }
    智力m_nParam;
};

void TestExceptions ()
{
    嘗試
    {
        整數 a = 42;
        int b = 0;
        擲出CMyEx (1) ;
        投擲97;
        整數 C = a / b;
    }
    接 (const CMyEx &e)
    {
        wprintf (L“CMyEx exception catch (param=%d) !\n”, e.m_nParam) ;
    }
    抓住 (......)
    {
        wprintf (L「未指定類型的例外,被省略號子句捕捉!\n」) ;
    }
} 在這個範例中,當 SEH 例外 (整數除) 以零時發生時,你總是會觸發第一個捕捉子句,而不是預期的省略處理程序。

解決方式

軟體更新資訊

Windows Embedded Compact 2013 月度更新 (2015 年 9 月,) 現已於 Microsoft 年提供。 要下載這個 Windows Embedded Compact 2013 月度更新,請前往 Microsoft OEM OnlineMyOEM。

先決條件

本產品必須已經安裝所有先前發行的更新,才能支援此更新。

重新啟動需求

套用此更新之後,您必須執行整個平台的乾淨組建。 若要解決此問題,請使用下列其中一種方法:

  • 在  [建置]  功能表上,選取  [清除方案],然後選取  [建置方案]
  • 在  [建置]  功能表上,選取  [重建方案]

您不必在套用此軟體更新後重新啟動電腦。

更新取代資訊

這個更新程式不會取代任何其他的更新程式。

檔案資訊

此軟體更新套件的英文版具有下表中所列的檔案屬性 (或較新的檔案屬性)。 這些檔案的日期與時間是以國際標準時間 (UTC) 表示。 當你查看檔案資訊時,它會被轉換成當地時間。 若要查看 UTC 與當地時間的差異,請使用 [控制台] 中 [日期和時間] 項目的 [時區] 索引標籤。

此更新套件隨附的檔案

檔案名稱 檔案大小 日期 時間 路徑
Frame.cpp 34,133 2014年11月13日 23:06 私人\Winceos\Coreos\Core\Corelibc\Crtw32\Eh
Fullcrt.lib 30,027,378 2015年9月9日 09:17 Public\Common\Oak\Lib\X86\Checked
Fullcrt.lib 30,228,292 2015年9月9日 09:17 Public\Common\Oak\Lib\X86\Retail
Fullcrt.lib 28,759,836 2015年9月9日 16:09 Public\Common\Oak\Lib\X86\Debug
Fullcrt.lib 29,278,300 2015年9月9日 09:17 Public\Common\Oak\Lib\Armv7\Checked
Fullcrt.lib 29,566,730 2015年9月9日 09:17 Public\Common\Oak\Lib\Armv7\Retail
Fullcrt.lib 33,139,560 2015年9月9日 16:09 Public\Common\Oak\Lib\Armv7\Debug
Msvcr110d.dll 1,339,952 2015年9月8日 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.dll 754,224 2015年9月8日 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.map 1,287,579 2015年9月8日 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.rel 528,834 2015年9月8日 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.map 788,986 2015年9月8日 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.rel 242,169 2015年9月8日 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.dll 1,145,312 2015年9月8日 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.dll 539,608 2015年9月8日 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110d.map 2,714,275 2015年9月8日 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110d.rel 215,924 2015年9月8日 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.map 1,258,317 2015年9月8日 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.rel 122,167 2015年9月8日 05:26 Public\Common\Sdk\Crt\Bin\Arm

      

參考資料

了解 Microsoft 用來說明軟體更新的術語