2010-10-15 26 views
6

đoạn mã sau ném một ngoại lệ trong C++ và bắt trong C# C++Có thể đọc được C++ CLI Thông báo ngoại lệ trong C#?

throw std::exception ("a C++ exception"); 

Khi tôi bắt trong C#, nó mang lại cho tôi những điều sau đây:

[SEHException (0x80004005): External component has thrown an exception.] 

ở đây là làm thế nào tôi gọi C++

using Foo.Bar.Sample; //C++ library 

.... 

Class1 class1 = new Class1(); //C++ class 
class1.throwAnException(); 

Chỉ cần tự hỏi làm thế nào tôi có thể nhận được "một C++ ngoại lệ" trong C#

+1

Bạn đã kiểm tra các vết đống? Ngoại lệ 'ToString()' có trong nó là gì? – Oded

+0

Bạn gọi mã C++ của bạn như thế nào từ C#? Qua PInvoke? –

+0

@ Matteo, tôi vừa sửa đổi câu hỏi để làm rõ – jebberwocky

Trả lời

4

Không đặt câu hỏi đúng cách. Đó là C++\CLI không phải là C++ ngoại lệ. Trong C++ \ CLI, làm như sau:

throw gcnew System::Exception("It is a C++\CLI exception"); 

hơn là C++ có nguồn gốc ngoại lệ

cảm ơn tất cả các bạn để trả lời và cho ý kiến ​​

2

Tôi khuyên bạn nên luôn luôn bắt ngoại lệ với cùng thời gian chạy đã ném chúng.

Và cách duy nhất để phân tích ngoại lệ là từ C++, vì bố cục ngoại lệ không được xác định.

2

Khi @CodeInChaos giải thích, C++ và .NET có các thời gian chạy khác nhau nên các ngoại lệ không cùng tồn tại rất tốt.

Bạn có thể sử dụng C++/CLI cho phần C++ không? Điều này sẽ thống nhất thời gian chạy và các ngoại lệ sẽ tương thích. Lưu ý rằng bạn có thể có một phần nhỏ của mã C++ sử dụng .NET (mã chế độ hỗn hợp).

+0

C++/CLI đang sử dụng trong trường hợp của tôi. làm thế nào tôi nên ném ngoại lệ của tôi đúng trong C + +/CLI cảm ơn – jebberwocky

+0

trả lời bản thân mình ... http: //en.wikipedia.org/wiki/C%2B%2B/CLI – jebberwocky

Các vấn đề liên quan