Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Note
Tento článek je specifický pro .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í. Pokud byly například 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>