Тази статия описва проблем, при който изключения на SEH са уловени от грешен манипулатор в Windows Embedded Compact 2013. Налична е актуализация, която да коригира този проблем. Преди да инсталирате тази актуализация, всички предишни актуализации за този продукт трябва да бъдат инсталирани.
Симптоми
Имайте предвид сценария, описан по-долу:
- Можете да използвате добавката Application Builder за Visual Studio 2013, за да създадете приложение на C++, което е предназначено за Windows Embedded Compact 2013.
- Асинхронното обработване на изключения се разрешава с помощта на компилатора "/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;
хвърляне CMyEx(1);
хвърляне 97;
int c = a / b;
}
улов (конст CMyEx &e)
{
wprintf(L"CMyEx exception caught (param=%d)!\n", e.m_nParam);
}
улов (...)
{
wprintf(L"Изключение от неопределен тип, схванат от многоточие клауза!\n");
}
} В тази извадка винаги попадате в първата клауза catch, когато възникне изключение SEH (цяло число делено на нула) вместо манипулатора за многоточие, както се очакваше.
Решение
Информация за актуализацията на софтуера
Месечната актуализация на Windows Embedded Compact 2013 (септември 2015 г.) вече се предлага от Microsoft. За да изтеглите тази месечна актуализация за Windows Embedded Compact 2013, отидете на Microsoft OEM Online или MyOEM.
Предварителни изисквания
Тази актуализация се поддържа само ако са инсталирани и всички предишни издадени актуализации за този продукт.
Изискване за рестартиране
След като приложите тази актуализация, трябва да извършите чисто компилация на цялата платформа. За да направите това, използвайте един от следните методи:
- В менюто "Компилация " изберете "Изчистване на решението" и след това изберете "Компилация на решение".
- В менюто "Компилация " изберете "Повторно създаване на решение".
Не е необходимо да рестартирате компютъра си, след като приложите тази актуализация на софтуера.
Информация за заместване на актуализация
Тази актуализация не замества други актуализации.
Информация за файла
Файловите атрибути на английската версия на този пакет за актуализация на софтуера (или по-нови) са посочени в следната таблица. Датите и часовете за тези файлове са изброени в координирано световно време (UTC). Информацията за файла се преобразува в местно време при преглед. За да определите разликата между UTC и локалното време, отворете раздела "Часова зона" в "Дата и час" на Контролен панел.
Files, които са включени в този пакет за актуализация
| Име на файл | Размер на файл | Дата | Час | Път |
|---|---|---|---|---|
| Frame.cpp | 34,133 | 13 ноември 2014 г. | 23:06 | Private\Winceos\Coreos\Core\Corelibc\Crtw32\Eh |
| Fullcrt.lib | 30,027,378 | 09 септември 2015 г. | 09:17 | Public\Common\Oak\Lib\x86\Checked |
| Fullcrt.lib | 30,228,292 | 09 септември 2015 г. | 09:17 | Public\Common\Oak\Lib\X86\Retail |
| Fullcrt.lib | 28,759,836 | 09 септември 2015 г. | 09:16 | Public\Common\Oak\Lib\X86\Debug |
| Fullcrt.lib | 29,278,300 | 09 септември 2015 г. | 09:17 | Public\Common\Oak\Lib\armv7\Checked |
| Fullcrt.lib | 29,566,730 | 09 септември 2015 г. | 09:17 | Public\Common\Oak\Lib\armv7\Retail |
| Fullcrt.lib | 33,139,560 | 09 септември 2015 г. | 09:16 | Public\Common\Oak\Lib\Armv7\Debug |
| Msvcr110d.dll | 1,339,952 | 08 септември 2015 г. | 05:26 | Public\Common\Sdk\Crt\Bin\X86 |
| Msvcr110.dll | 754,224 | 08 септември 2015 г. | 05:26 | Public\Common\Sdk\Crt\Bin\X86 |
| msvcr110d.map | 1,287,579 | 08 септември 2015 г. | 05:26 | Public\Common\Sdk\Crt\Bin\X86 |
| msvcr110d.rel | 528,834 | 08 септември 2015 г. | 05:26 | Public\Common\Sdk\Crt\Bin\X86 |
| msvcr110.map | 788,986 | 08 септември 2015 г. | 05:26 | Public\Common\Sdk\Crt\Bin\X86 |
| msvcr110.rel | 242,169 | 08 септември 2015 г. | 05:26 | Public\Common\Sdk\Crt\Bin\X86 |
| Msvcr110d.dll | 1,145,312 | 08 септември 2015 г. | 05:26 | Public\Common\Sdk\Crt\Bin\Arm |
| Msvcr110.dll | 539,608 | 08 септември 2015 г. | 05:26 | Public\Common\Sdk\Crt\Bin\Arm |
| msvcr110d.map | 2,714,275 | 08 септември 2015 г. | 05:26 | Public\Common\Sdk\Crt\Bin\Arm |
| msvcr110d.rel | 215,924 | 08 септември 2015 г. | 05:26 | Public\Common\Sdk\Crt\Bin\Arm |
| msvcr110.map | 1,258,317 | 08 септември 2015 г. | 05:26 | Public\Common\Sdk\Crt\Bin\Arm |
| msvcr110.rel | 122,167 | 08 септември 2015 г. | 05:26 | Public\Common\Sdk\Crt\Bin\Arm |
Справки
Научете повече относно терминологията, която Microsoft използва за описване на актуализациите на софтуера.