修复:在 WEC 2013 中启用异步异常处理时,错误异常处理程序捕获 SEH 异常

本文介绍 Windows Embedded Compact 2013 中的错误处理程序捕获 SEH 异常的问题。 更新可用于解决此问题。 安全此更新之前,必须安装适用于此产品的所有以前发布的更新。

症状

请考虑以下情形:

  • 使用 Application Builder 插件Visual Studio 2013创建面向 Windows Embedded Compact 2013 的 C++ 应用程序。
  • 可以使用“/EHa”编译器开关启用异步异常处理。 此开关允许将 C++ 同步和结构化异常处理 (SEH) 异步异常处理方法混合在同一代码中。
  • 运行相关代码来捕获 SEH 异常。

在此方案中,SEH 异常始终在第一个异常处理程序中捕获,即使针对 C++ 同步异常进行筛选也是如此。 

预期行为是省略号异常处理程序捕获的 SEH 异常。

例如,运行以下示例代码:class CMyEx
{
公共:
    CMyEx (int nParam) : m_nParam (nParam) { }
    int m_nParam;
};

void TestExceptions ()
{
    试用
    {
        int a = 42;
        int b = 0;
        throw CMyEx (1) ;
        throw 97;
        int c = a / b;
    }
    catch (const CMyEx &e)
    {
        wprintf (L“CMyEx 异常捕获 (param=%d) !\n”, e.m_nParam) ;
    }
    catch (...)
    {
        wprintf (L“省略号子句捕获的未指定类型的异常!\n”) ;
    }
} 在此示例中,当发生 SEH 异常 (整数除以零) 而不是按预期出现省略号处理程序时,始终命中第一个 catch 子句。

解决方法

软件更新信息

Windows Embedded Compact 2013 月度更新 (2015 年 9 月) 现已从 Microsoft 提供。 若要下载此 Windows Embedded Compact 2013 月度更新,请转到 Microsoft OEM OnlineMyOEM

先决条件

仅当已安装了以前针对该产品发布的所有更新时,才支持此更新。

重启要求

应用此更新后,必须对整个平台执行清理生成。 为此,请使用下列方法之一:

  • 在“生成”菜单上,依次选择“清理解决方案”和“生成解决方案”。
  • 在“生成”菜单上,选择“重新生成解决方案”。

应用此软件更新后,无需重启计算机。

更新替换信息

此更新不替代任何其他更新。

文件信息

此软件更新包的英文版本具有下表列出的文件属性(或更新的文件属性)。 这些文件的日期和时间按协调世界时 (UTC) 列出。 查看文件信息时,会将其转换为本地时间。 要了解 UTC 与本地时间之间的时差,请使用“控制面板”中“日期和时间”项中的“时区”选项卡。

包含在此更新包中的文件

文件名 文件大小 日期 时间 路径
Frame.cpp 34,133 2014 年 11 月 13 日 1:23:06 AM Private\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 用于描述软件更新的术语