Поделиться через


Помощник по отладке управляемого кода dirtyCastAndCallOnInterface

Обновлен: Ноябрь 2007

Помощник по отладке управляемого кода (MDA) dirtyCastAndCallOnInterface активируется при попытке вызова с ранней привязкой посредством таблицы виртуальных методов для интерфейса класса, для которого разрешены только вызовы с поздней привязкой.

Признаки

При выполнении вызова с ранней привязкой посредством СОМ в среде CLR приложение выводит сообщение о нарушении прав доступа или непредвиденном поведении.

Причина

Код пытается выполнить вызов с ранней привязкой посредством таблицы виртуальных методов через интерфейс класса, для которого разрешены только вызовы с поздней привязкой. Обратите внимание, что для интерфейсов класса по умолчанию разрешены только вызовы с поздней привязкой. Позднюю привязку для данных интерфейсов можно также определить с помощью атрибута ClassInterfaceAttribute, которому присвоено значениеAutoDispatch ([ClassInterface(ClassInterfaceType.AutoDispatch)]).

Решение

Рекомендуется определить явный интерфейс для использования моделью СОМ и выполнять вызовы клиентов СОМ через данный интерфейс вместо автоматически создаваемого интерфейса класса. Кроме того, вызов из модели СОМ можно преобразовать в вызов с поздней привязкой посредством интерфейса IDispatch.

И наконец, можно определить класс как AutoDual ([ClassInterface(ClassInterfaceType.AutoDual)]), чтобы разрешить выполнение вызовов с ранней привязкой из СОМ; однако не рекомендуется использовать AutoDual, вследствие связанных с версиями ограничений, которые перечислены в описании атрибута ClassInterfaceAttribute.

Влияние на среду выполнения

Данный помощник по отладке управляемого кода не оказывает влияния на среду CLR. Он только выводит сведения о вызовах с ранней привязкой в интерфейсах, для которых разрешены вызовы только с поздней привязкой.

Результат

Имя метода или поля, к которому обращается вызов с ранней привязкой.

Конфигурация

<mdaConfig>
  <assistants>
    <dirtyCastAndCallOnInterface />
  </assistants>
</mdaConfig>

См. также

Основные понятия

Диагностика ошибок посредством управляемых помощников по отладке

Ссылки

ClassInterfaceAttribute

Другие ресурсы

Взаимодействие