Chúng ta có một phần lớn mã C++ gốc, được biên dịch thành các tệp DLL.Các cấu trúc không được gọi khi ngoại lệ gốc (C++) lan truyền đến thành phần CLR
Sau đó, chúng tôi có một vài dll chứa mã proxy C++/CLI để bọc giao diện C++.
Trên hết, chúng tôi có mã C# gọi vào trình bao bọc C++/CLI.
Công cụ chuẩn, cho đến nay.
Nhưng chúng tôi có rất nhiều trường hợp ngoại lệ gốc C++ được phép truyền tới thế giới .Net và chúng tôi dựa vào khả năng của .Net để bọc chúng dưới dạng đối tượng System.Exception và phần lớn hoạt động tốt.
Tuy nhiên, chúng tôi đã nhận thấy rằng các trình phá hủy của các đối tượng trong phạm vi tại điểm ném không được gọi khi ngoại lệ lan truyền!
Sau một số nghiên cứu, chúng tôi thấy rằng đây là vấn đề khá nổi tiếng. Tuy nhiên các giải pháp/cách giải quyết dường như ít nhất quán. Chúng tôi đã thấy rằng nếu mã gốc được biên dịch bằng/EHa thay vì/EHsc thì vấn đề sẽ biến mất (ít nhất là trong trường hợp thử nghiệm của chúng tôi). Tuy nhiên, chúng tôi rất thích sử dụng/EHsc vì chúng tôi dịch ngoại lệ SEH sang ngoại lệ C++ và chúng tôi muốn cho phép trình biên dịch có phạm vi tối ưu hóa hơn.
Có cách giải quyết nào khác cho vấn đề này - ngoài việc gói mọi cuộc gọi qua ranh giới được quản lý tự nhiên trong một thử (bắt nguồn) (ngoài lớp C++/CLI)?
bạn có tìm thấy câu trả lời đúng cho số này –
Tôi không nhớ bây giờ, thật không may. – philsquared