Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Note
Este artículo es específico de .NET Framework. No se aplica a implementaciones más recientes de .NET, incluidas .NET 6 y versiones posteriores.
El nonComVisibleBaseClass asistente de depuración administrada (MDA) se activa cuando un código nativo o no administrado realiza una QueryInterface llamada en el contenedor com (CCW) de una clase administrada visible para COM que deriva de una clase base que no es visible para COM. La QueryInterface llamada hace que el MDA se active solo en los casos en los que la llamada solicite la interfaz de clase o el valor predeterminado IDispatch de la clase administrada visible para COM. El MDA no se activa cuando QueryInterface es para una interfaz explícita que tiene aplicado el ClassInterfaceAttribute atributo y se implementa explícitamente mediante la clase visible para COM.
Síntomas
Una QueryInterface llamada realizada a partir de código nativo que produce un error con un COR_E_INVALIDOPERATION HRESULT. HRESULT puede deberse a que el tiempo de ejecución no permite QueryInterface llamadas que provocarían la activación de este MDA.
Causa
El tiempo de ejecución no puede permitir QueryInterface llamadas a la interfaz de clase ni a una interfaz predeterminada IDispatch de una clase visible para COM que deriva de una clase que no es visible para COM debido a posibles problemas de control de versiones. Por ejemplo, si se agregaron miembros públicos a la clase base que no es visible para COM, los clientes COM existentes que usan la clase derivada podrían interrumpirse porque la tabla virtual de la clase derivada, que contiene los miembros de la clase base, se modificaría mediante este cambio. Las interfaces explícitas expuestas a COM no tienen este problema porque no incluyen los miembros base de las interfaces en la tabla virtual.
Resolución
No exponga la interfaz de clase. Defina una interfaz explícita y aplique el ClassInterfaceAttribute atributo a ella.
Efecto en el tiempo de ejecución
Este MDA no tiene ningún efecto en clR.
Output
A continuación se muestra un mensaje de ejemplo para una QueryInterface llamada en una clase Derived visible para COM que deriva de una clase Baseque no es visible para COM.
A QueryInterface call was made requesting the class interface of COM
visible managed class 'Derived'. However since this class derives from
non COM visible class 'Base', the QueryInterface call will fail. This
is done to prevent the non COM visible base class from being
constrained by the COM versioning rules.
Configuration
<mdaConfig>
<assistants>
<nonComVisibleBaseClass />
</assistants>
</mdaConfig>