How to: Catch Exceptions in Native Code Thrown from MSIL

 

The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at How to: Catch Exceptions in Native Code Thrown from MSIL.

In native code, you can catch native C++ exception from MSIL. You can catch CLR exceptions with __try and __except.

For more information, see Structured Exception Handling (C/C++) and C++ Exception Handling.

Example

The following sample defines a module with two functions, one that throws a native exception, and another that throws an MSIL exception.

// catch_MSIL_in_native.cpp  
// compile with: /clr /c  
void Test() {  
   throw ("error");  
}  
  
void Test2() {  
   throw (gcnew System::Exception("error2"));  
}  

Example

The following sample defines a module that catches a native and MSIL exception.

// catch_MSIL_in_native_2.cpp  
// compile with: /clr catch_MSIL_in_native.obj  
#include <iostream>  
using namespace std;  
void Test();  
void Test2();  
  
void Func() {  
   // catch any exception from MSIL  
   // should not catch Visual C++ exceptions like this  
   // runtime may not destroy the object thrown  
   __try {  
      Test2();  
   }  
   __except(1) {  
      cout << "caught an exception" << endl;  
   }  
  
}  
  
int main() {  
   // catch native C++ exception from MSIL  
   try {  
      Test();  
   }  
   catch(char * S) {  
      cout << S << endl;  
   }  
   Func();  
}  
error  
caught an exception  

See Also

Exception Handling