Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés

nonComVisibleBaseClass MDA

 

El Asistente para la depuración administrada (MDA) nonComVisibleBaseClass se activa cuando se realiza una llamada a QueryInterface desde código no administrado o nativo en el contenedor CCW de una clase administrada visible para COM que deriva de una clase base que no es visible para COM. La llamada a QueryInterface hace que el MDA se active solo cuando la llamada solicita la interfaz de clase o la interfaz 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 atributo ClassInterfaceAttribute y se implementa explícitamente la clase visible para COM.

Una llamada a QueryInterface que se realiza desde código nativo produce el error COR_E_INVALIDOPERATION HRESULT. El HRESULT podría deberse a que CLR no permite llamadas a QueryInterface que producirían la activación de este MDA.

CLR no puede permitir llamadas a QueryInterface para la interfaz de clase o la interfaz IDispatch predeterminada de una clase visible para COM que deriva de una clase que no es visible para COM debido a posibles problemas de versiones. Por ejemplo, si se agregan 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 vtable de la clase derivada, que contiene los miembros de clase base, se vería alterada por ese cambio. Las interfaces explícitas expuestas a COM no tienen este problema porque no incluyen los miembros base de las interfaces en la vtable.

No exponga la interfaz de clase. Defina una interfaz explícita y aplíquele el atributo ClassInterfaceAttribute.

Este MDA no tiene ningún efecto en el CLR.

El siguiente es un mensaje de ejemplo de una llamada a QueryInterface en una clase visible para COM Derived que deriva de una clase no visible para COM Base.

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. 

<mdaConfig>
  <assistants>
    <nonComVisibleBaseClass />
  </assistants>
</mdaConfig>
Mostrar: