CORREÇÃO: as exceções SEH são detetados pelo processador de exceções errado quando o processamento de exceções assíncronas está ativado no WEC 2013

Este artigo descreve um problema em que as exceções SEH são detetadas por um processador errado no Windows Embedded Compact 2013. Está disponível uma atualização para corrigir este problema. Antes de instalar esta atualização, todas as atualizações anteriormente emitidas para este produto têm de ser instaladas.

Sintomas

Tenha em conta o seguinte cenário:

  • Utilize o plug-in do Application Builder para Visual Studio 2013 para criar uma aplicação C++ destinada ao Windows Embedded Compact 2013.
  • Pode ativar o processamento de exceções assíncrona com o comutador do compilador "/EHa". Este comutador permite que os métodos de processamento de exceções assíncronas de C++ e estruturados (SEH) sejam misturados no mesmo código.
  • Executa o código relacionado para detetar exceções SEH.

Neste cenário, as exceções SEH são sempre detetados no primeiro processador de exceções, mesmo que esteja filtrado para uma exceção síncrona C++. 

O comportamento esperado são as exceções SEH que estão a ser detetas pelo processador de exceções de reticências.

Por exemplo, executa o seguinte código de exemplo:classe CMyEx
{
público:
    CMyEx(int nParam) : m_nParam(nParam) { }
    int m_nParam;
};

void TestExceptions()
{
    experimente
    {
        int a = 42;
        int b = 0;
        throw CMyEx(1);
        lançamento 97;
        int c = a / b;
    }
    catch (const CMyEx &e)
    {
        wprintf(Exceção L"CMyEx detetado (param=%d)!\n", e.m_nParam);
    }
    catch (...)
    {
        wprintf(L"Exceção do tipo não especificado capturado pela cláusula de reticências!\n");
    }
} Neste exemplo, atingiu sempre a primeira cláusula catch quando a exceção SEH (divisão de número inteiro por zero) ocorre em vez do processador de reticências conforme esperado.

Resolução

Informações de atualização de software

A Atualização Mensal do Windows Embedded Compact 2013 (setembro de 2015) está agora disponível na Microsoft. Para transferir esta atualização mensal do Windows Embedded Compact 2013, aceda a Microsoft OEM Online ou MyOEM.

Pré-requisitos

Esta atualização só é suportada se todas as atualizações anteriormente emitidas para este produto também tiverem sido instaladas.

Requisito de reinício

Depois de aplicar esta atualização, tem de efetuar uma compilação limpa de toda a plataforma. Para tal, utilize um dos seguintes métodos:

  • No menu Compilar , selecione Solução Limpa e, em seguida, selecione Criar Solução.
  • No menu Compilar , selecione Reconstruir Solução.

Não tem de reiniciar o computador depois de aplicar esta atualização de software.

Informações de substituição de atualizações

Esta atualização não substitui outras atualizações.

Informações de ficheiro

A versão em inglês deste pacote de atualização de software tem os atributos de ficheiro (ou atributos de ficheiro posteriores) que estão listados na tabela seguinte. As datas e horas destes ficheiros estão listadas na Hora Universal Coordenada (UTC). Quando vê as informações do ficheiro, estas são convertidas para a hora local. Para encontrar a diferença entre a hora UTC e a hora local, utilize o separador Fuso Horário no item Data e Hora no Painel de Controlo.

Files incluídos neste pacote de atualização

Nome de ficheiro Tamanho do ficheiro Data Hora Caminho
Frame.cpp 34,133 13-Nov-2014 23:06 Private\Winceos\Coreos\Core\Corelibc\Crtw32\Eh
Fullcrt.lib 30,027,378 09-Set-2015 09:17 Público\Comum\Carvalho\Lib\X86\Verificado
Fullcrt.lib 30,228,292 09-Set-2015 09:17 Público\Common\Oak\Lib\X86\Retail
Fullcrt.lib 28,759,836 09-Set-2015 09:16 Public\Common\Oak\Lib\X86\Debug
Fullcrt.lib 29,278,300 09-Set-2015 09:17 Público\Comum\Carvalho\Lib\Armv7\Verificado
Fullcrt.lib 29,566,730 09-Set-2015 09:17 Público\Common\Oak\Lib\Armv7\Retail
Fullcrt.lib 33,139,560 09-Set-2015 09:16 Public\Common\Oak\Lib\Armv7\Debug
Msvcr110d.dll 1,339,952 08-Set-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.dll 754,224 08-Set-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.map 1,287,579 08-Set-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.rel 528,834 08-Set-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.map 788,986 08-Set-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.rel 242,169 08-Set-2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.dll 1,145,312 08-Set-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.dll 539,608 08-Set-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110d.map 2,714,275 08-Set-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110d.rel 215,924 08-Set-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.map 1,258,317 08-Set-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.rel 122,167 08-Set-2015 05:26 Public\Common\Sdk\Crt\Bin\Arm

      

Referências

Saiba mais sobre a terminologia que a Microsoft utiliza para descrever as atualizações de software.