Sdílet prostřednictvím


nonComVisibleBaseClass – pomocník spravovaného ladění (MDA)

Poznámka:

Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.

Pomocník nonComVisibleBaseClass spravovaného ladění (MDA) se aktivuje, když QueryInterface je volání provedeno nativním nebo nespravovaným kódem na obálku MODELU COM (CCW) viditelné spravované třídy modelu COM, která je odvozena od základní třídy, která není viditelná modelEM COM. Volání QueryInterface způsobí, že MDA aktivuje pouze v případech, kdy volání požaduje rozhraní třídy nebo výchozí IDispatch spravovanou třídu modelu COM. MDA není aktivována, pokud QueryInterface je pro explicitní rozhraní, které má ClassInterfaceAttribute použitý atribut a je explicitně implementováno třídou com-visible.

Příznaky

Volání QueryInterface z nativního kódu, které selhává s COR_E_INVALIDOPERATION HRESULT HODNOTA HRESULT může být způsobená tím, že modul runtime nepovoluje QueryInterface volání, která by způsobila aktivaci tohoto MDA.

Příčina

Modul runtime nemůže povolit QueryInterface volání pro rozhraní třídy nebo výchozí IDispatch rozhraní třídy viditelné modelu COM, která je odvozena z třídy, která není viditelná modelu COM kvůli potenciálním problémům s verzí. Například pokud byly přidány do základní třídy, které nejsou viditelné modelu COM, stávající klienti modelu COM používající odvozenou třídu by mohli potenciálně přerušit, protože virtuální tabulka odvozené třídy, která obsahuje členy základní třídy, by byla touto změnou změněna. Explicitní rozhraní vystavená modelu COM tento problém nemají, protože nezahrnují základní členy rozhraní ve virtuální tabulce.

Rozlišení

Nezpřístupňujte rozhraní třídy. Definujte explicitní rozhraní a použijte na ClassInterfaceAttribute něj atribut.

Vliv na modul runtime

Tento mdA nemá žádný vliv na CLR.

Výstup

Následuje příklad zprávy pro QueryInterface volání třídy COM-visible Derived , která je odvozena z ne-COM-visible třídy 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.

Konfigurace

<mdaConfig>
  <assistants>
    <nonComVisibleBaseClass />
  </assistants>
</mdaConfig>

Viz také