Compiler COM Support Classes

Microsoft Specific

Standard classes are used to support some of the COM types. The classes are defined in COMDEF.H and the header files generated from the type library.

#include <comdef.h>

Class Purpose
_com_error Defines the error object thrown by _com_raise_error in most failures.
_com_ptr_t Encapsulates COM interface pointers, and automates the required calls to AddRef, Release, and QueryInterface.
_bstr_t Wraps the BSTR type to provide useful operators and methods.
_variant_t Wraps the VARIANT type to provide useful operators and methods.

In addition, there is a support routine called _com_raise_error, which is used by all compiler-generated COM support code to throw a _com_error in response to a failure

_com_raise_error is defined in comdef.h as,

void __stdcall _com_raise_error(HRESULT hr, IErrorInfo* perrinfo = 0) throw(_com_error);

The actual source code is,

void __stdcall _com_raise_error(HRESULT hr, IErrorInfo* perrinfo) throw(_com_error)
{
   throw _com_error(hr, perrinfo);
}

_com_raise_error can be replaced by a user-written version of the same name and prototype. This could be done if you want to use #import, but don't want to use C++ exception handling.  In that case, a user version of _com_raise_error might decide to do a longjmp or pop up a message box and halt. The user version should not return, though, since the compiler COM support code does not expect it to return.

END Microsoft Specific