Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Note
Эта статья относится к .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.
Помощник nonComVisibleBaseClass по управляемой отладке (MDA) активируется при QueryInterface вызове собственного или неуправляемого кода в вызываемом оболочке COM (CCW) управляемого класса COM, который является производным от базового класса, который не отображается COM. Вызов QueryInterface приводит к активации MDA только в тех случаях, когда вызов запрашивает интерфейс класса или по умолчанию IDispatch управляемого класса COM-видимого класса. MDA не активируется, если QueryInterface он предназначен для явного интерфейса с ClassInterfaceAttribute примененным атрибутом и явно реализуется классом COM-видимым.
Симптомы
Вызов QueryInterface из машинного кода, который завершается ошибкой с COR_E_INVALIDOPERATION HRESULT. HRESULT может быть вызван запретом среды выполнения вызовов QueryInterface , которые вызывают активацию этого MDA.
Причина
Среда выполнения не может разрешать QueryInterface вызовы интерфейса класса или интерфейса по умолчанию IDispatch com-видимого класса, наследуемого от класса, который не отображается COM из-за потенциальных проблем с управлением версиями. Например, если в базовый класс, который не отображается COM, существующие com-клиенты, использующие производный класс, могут потенциально нарушиться, так как vtable производного класса, который содержит члены базового класса, будет изменен таким изменением. Явные интерфейсы, предоставляемые COM, не имеют этой проблемы, так как они не включают базовые члены интерфейсов в vtable.
Разрешение
Не предоставляйте интерфейс класса. Определите явный интерфейс и примените ClassInterfaceAttribute к нему атрибут.
Влияние на среду выполнения
Этот MDA не влияет на среду CLR.
Выходные данные
Ниже приведен пример сообщения для QueryInterface вызова com-видимого класса Derived , наследуемого от класса, отличного от 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>