Avoiding Exceptions on CLR Shutdown When Consuming COM Objects Built with /clr


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 Avoiding Exceptions thrown by COM Objects Built with -clr.

Once the common language runtime (CLR) enters shutdown mode, native functions have limited access to CLR services. When attempting to call Release on a COM object compiled with /clr, the CLR transitions to native code and then transitions back into managed code to service the IUnknown::Release call (which is defined in managed code). The CLR prevents the call back into managed code since it is in shutdown mode.

To resolve this, ensure that destructors called from Release methods only contain native code.

Mixed (Native and Managed) Assemblies