nonComVisibleBaseClass (MDA)
L'assistente al debug gestito nonComVisibleBaseClass viene attivato quando viene effettuata una chiamata QueryInterface da codice nativo o non gestito sul CCW (COM Callable Wrapper) di una classe gestita visibile a COM che deriva da una classe base non visibile a COM. La chiamata QueryInterface causa l'attivazione dell'assistente al debug gestito solo nei casi in cui la chiamata richiede l'interfaccia di classe o l'interfaccia IDispatch predefinita della classe gestita visibile a COM. L'assistente al debug gestito non viene attivato quando la chiamata QueryInterface è indirizzata a un'interfaccia esplicita alla quale è applicato l'attributo ClassInterfaceAttribute ed è implementata esplicitamente dalla classe visibile a COM.
Sintomi
Viene effettuata una chiamata QueryInterface da codice nativo che restituisce l'errore COR_E_INVALIDOPERATION HRESULT. Tale errore potrebbe essere causato dal fatto che Common Language Runtime non consente chiamate QueryInterface che comporterebbero l'attivazione di questo assistente al debug gestito.
Causa
Per evitare potenziali problemi di controllo delle versioni, è possibile che Common Language Runtime non consenta chiamate QueryInterface per l'interfaccia di classe o l'interfaccia IDispatch predefinita di una classe visibile a COM che deriva da una classe non visibile a COM. Se ad esempio sono stati aggiunti membri pubblici alla classe base non visibile a COM, i client COM esistenti che utilizzano la classe derivata potrebbero interrompersi poiché la vtable della classe derivata, contenente i membri della classe base, verrebbe alterata da una tale modifica. Le interfacce esplicite esposte a COM non presentano questo problema poiché non includono i membri base delle interfacce nella vtable.
Risoluzione
Non esporre l'interfaccia di classe. Definire un'interfaccia esplicita e applicarvi l'attributo ClassInterfaceAttribute.
Effetti su Common Language Runtime
Questo assistente al debug gestito non ha alcun effetto su Common Language Runtime (CLR).
Output
Di seguito è riportato un messaggio di esempio relativo a una chiamata QueryInterface su una classe Derived visibile a COM che deriva da una classe Base non visibile a 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.
Configurazione
<mdaConfig>
<assistants>
<nonComVisibleBaseClass />
</assistants>
</mdaConfig>
Vedere anche
Riferimenti
Concetti
Diagnostica degli errori tramite gli assistenti al debug gestito
Marshalling di interoperabilità