KHẮC PHỤC: Ngoại lệ SEH bị bắt bởi bộ xử lý ngoại lệ sai khi xử lý ngoại lệ không đồng bộ được bật trong WEC 2013

Bài viết này mô tả một vấn đề trong đó ngoại lệ SEH bị bắt bởi một xử lý sai trong Windows Embedded Compact 2013. Đã có bản cập nhật để khắc phục sự cố này. Trước khi bạn cài đặt bản cập nhật này, bạn phải cài đặt tất cả các bản cập nhật đã phát hành trước đó cho sản phẩm này.

Triệu chứng

Hãy cân nhắc các trường hợp sau:

  • Bạn sử dụng bổ trợ Bộ dựng Ứng dụng cho Visual Studio 2013 để tạo ứng dụng C++ nhắm mục tiêu Windows Embedded Compact 2013.
  • Bạn cho phép xử lý ngoại lệ không đồng bộ bằng cách sử dụng chuyển đổi trình biên dịch "/EHa". Khóa chuyển này cho phép cả phương pháp xử lý ngoại lệ đồng bộ và có cấu trúc (SEH) ngoại lệ không đồng bộ được trộn lẫn trong cùng một mã.
  • Bạn chạy mã liên quan để nắm bắt ngoại lệ SEH.

Trong trường hợp này, ngoại lệ SEH luôn được đánh bắt trong xử lý ngoại lệ đầu tiên ngay cả khi nó được lọc cho một ngoại lệ đồng bộ C++. 

Hành vi dự kiến là ngoại lệ SEH được đánh bắt bởi bộ xử lý ngoại lệ dấu chấm lửng.

Ví dụ: bạn chạy mã mẫu sau:class CMyEx
{
Công cộng:
    CMyEx(int nParam) : m_nParam(nParam) { }
    không m_nParam;
};

void TestExceptions()
{
    thử nếu
    {
        int a = 42;
        int b = 0;
        ném CMyEx(1);
        ném 97;
        int c = a / b;
    }
    catch (const CMyEx &e)
    {
        wprintf(L"CMyEx exception caught (param=%d)!\n", e.m_nParam);
    }
    bắt (...)
    {
        wprintf(L"Exception of unspecified type caught by ellipsis clause!\n");
    }
} Trong mẫu này, bạn luôn nhấn mệnh đề bắt đầu tiên khi ngoại lệ SEH (số nguyên chia cho không) xảy ra thay vì bộ xử lý dấu chấm lửng như mong đợi.

Giải pháp

Thông tin cập nhật phần mềm

Bản cập nhật Hàng tháng Windows Embedded Compact 2013 (tháng 9 năm 2015) hiện có sẵn từ Microsoft. Để tải xuống bản cập nhật hàng tháng Windows Embedded Compact 2013 này, hãy truy cập Microsoft OEM Onlinehoặc MyOEM.

Điều kiện tiên quyết

Bản cập nhật này chỉ được hỗ trợ nếu tất cả các bản cập nhật đã phát hành trước đó cho sản phẩm này cũng đã được cài đặt.

Yêu cầu khởi động lại

Sau khi bạn áp dụng bản cập nhật này, bạn phải thực hiện một bản dựng sạch của toàn bộ nền tảng. Để thực hiện điều này, hãy sử dụng một trong các phương pháp sau đây:

  • Trên menu Bản dựng, chọn Giải pháp sạch, sau đó chọn Giải pháp Xây dựng.
  • Trên menu Bản dựng, chọn Dựng lại Giải pháp.

Bạn không phải khởi động lại máy tính sau khi áp dụng bản cập nhật phần mềm này.

Thông tin về việc thay thế bản cập nhật

Bản cập nhật này không thay thế bất kỳ bản cập nhật nào khác.

Thông tin tệp

Phiên bản tiếng Anh của gói cập nhật phần mềm này có các thuộc tính tệp (hoặc các thuộc tính tệp mới hơn) được liệt kê trong bảng sau đây. Ngày và giờ cho các tệp này được liệt kê theo Giờ Quốc tế Phối hợp (UTC). Khi bạn xem thông tin tệp, nó sẽ được chuyển đổi thành giờ địa phương. Để tìm ra sự khác biệt giữa UTC và giờ địa phương, hãy dùng tab Múi giờ trong mục Ngày Giờ trong Panel điều khiển.

Files có trong gói cập nhật này

Tên tệp Kích thước tệp Ngày Thời gian Đường dẫn
Frame.cpp 34,133 Ngày 13 tháng 11 năm 2014 23:06 Riêng tư\Winceos\Coreos\Core\Corelibc\Crtw32\Eh
Fullcrt.lib 30,027,378 Ngày 9 tháng 9 năm 2015 09:17 Public\Common\Oak\Lib\X86\Checked
Fullcrt.lib 30,228,292 Ngày 9 tháng 9 năm 2015 09:17 Public\Common\Oak\Lib\X86\Retail
Fullcrt.lib 28,759,836 Ngày 9 tháng 9 năm 2015 09:16 Public\Common\Oak\Lib\X86\Debug
Fullcrt.lib 29,278,300 Ngày 9 tháng 9 năm 2015 09:17 Public\Common\Oak\Lib\Armv7\Checked
Fullcrt.lib 29,566,730 Ngày 9 tháng 9 năm 2015 09:17 Public\Common\Oak\Lib\Armv7\Retail
Fullcrt.lib 33,139,560 Ngày 9 tháng 9 năm 2015 09:16 Public\Common\Oak\Lib\Armv7\Debug
Msvcr110d.dll 1,339,952 Ngày 8 tháng 9 năm 2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.dll 754,224 Ngày 8 tháng 9 năm 2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.map 1,287,579 Ngày 8 tháng 9 năm 2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.rel 528,834 Ngày 8 tháng 9 năm 2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.map 788,986 Ngày 8 tháng 9 năm 2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110.rel 242,169 Ngày 8 tháng 9 năm 2015 05:26 Public\Common\Sdk\Crt\Bin\X86
Msvcr110d.dll 1,145,312 Ngày 8 tháng 9 năm 2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.dll 539,608 Ngày 8 tháng 9 năm 2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110d.map 2,714,275 Ngày 8 tháng 9 năm 2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110d.rel 215,924 Ngày 8 tháng 9 năm 2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.map 1,258,317 Ngày 8 tháng 9 năm 2015 05:26 Public\Common\Sdk\Crt\Bin\Arm
Msvcr110.rel 122,167 Ngày 8 tháng 9 năm 2015 05:26 Public\Common\Sdk\Crt\Bin\Arm

      

Tham khảo

Tìm hiểu về thuật ngữ mà Microsoft dùng để mô tả các bản cập nhật phần mềm.