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.