Помощник по отладке управляемого кода dirtyCastAndCallOnInterface
Обновлен: Ноябрь 2007
Помощник по отладке управляемого кода (MDA) dirtyCastAndCallOnInterface активируется при попытке вызова с ранней привязкой посредством таблицы виртуальных методов для интерфейса класса, для которого разрешены только вызовы с поздней привязкой.
Признаки
При выполнении вызова с ранней привязкой посредством СОМ в среде CLR приложение выводит сообщение о нарушении прав доступа или непредвиденном поведении.
Причина
Код пытается выполнить вызов с ранней привязкой посредством таблицы виртуальных методов через интерфейс класса, для которого разрешены только вызовы с поздней привязкой. Обратите внимание, что для интерфейсов класса по умолчанию разрешены только вызовы с поздней привязкой. Позднюю привязку для данных интерфейсов можно также определить с помощью атрибута ClassInterfaceAttribute, которому присвоено значениеAutoDispatch ([ClassInterface(ClassInterfaceType.AutoDispatch)]).
Решение
Рекомендуется определить явный интерфейс для использования моделью СОМ и выполнять вызовы клиентов СОМ через данный интерфейс вместо автоматически создаваемого интерфейса класса. Кроме того, вызов из модели СОМ можно преобразовать в вызов с поздней привязкой посредством интерфейса IDispatch.
И наконец, можно определить класс как AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]), чтобы разрешить выполнение вызовов с ранней привязкой из СОМ; однако не рекомендуется использовать AutoDual, вследствие связанных с версиями ограничений, которые перечислены в описании атрибута ClassInterfaceAttribute.
Влияние на среду выполнения
Данный помощник по отладке управляемого кода не оказывает влияния на среду CLR. Он только выводит сведения о вызовах с ранней привязкой в интерфейсах, для которых разрешены вызовы только с поздней привязкой.
Результат
Имя метода или поля, к которому обращается вызов с ранней привязкой.
Конфигурация
<mdaConfig>
<assistants>
<dirtyCastAndCallOnInterface />
</assistants>
</mdaConfig>
См. также
Основные понятия
Диагностика ошибок посредством управляемых помощников по отладке