For an ATL class, the
QueryInterface is implemented in
CComObject. The figure below is the inheritance hierarchy for a class generated by the wizard representing an ATL-COM object.
CComObjectRootBase has an InternalQueryInterface method, which uses the interface map built by the
BEGIN_COM_MAP macro to resolve IID -> interface pointer. The
BEGIN_COM_MAP macro also defines a method
_InternalQueryInterface, which passes the map on to
QueryInterface, and calls
CComObjectRootEx: Provides methods to handle object reference count management for both nonaggregated and aggregated objects.
IUnknown for a nonaggregated object. It is a template class that takes a class like
CSomeClass derived from
IUnknown for a nonaggregated object, but does not increment the module lock count in the constructor. ATL uses
CComObjectNoLock internally for class factories.
CComCoClass: Defines the object's default class factory and aggregation model.