Имитация COM-интерфейсов
Обновлен: Ноябрь 2007
Вызываемая оболочка COM предоставляет COM-клиентам доступ ко всем открытым COM-видимым интерфейсам, типам данных и возвращаемым значениям, используя средства, совместимые с реализацией средствами COM взаимодействия на основе интерфейсов. Для COM-клиента вызов методов в объекте .NET Framework идентичен вызову методов в COM-объекте.
Для обеспечения такой унификации вызываемая оболочка COM создает традиционные COM-интерфейсы, такие как IUnknown и IDispatch. Как показано на следующем рисунке, вызываемая оболочка COM содержит единственную ссылку на инкапсулируемый в нее объект .NET. И COM-клиент, и объект .NET взаимодействуют друг с другом, используя создание вызываемой оболочкой COM посредника и программной заглушки.
COM-интерфейсы и вызываемая оболочка COM
.NET Framework не только обеспечивает доступ к интерфейсам, которые явным образом реализуются классом в управляемой среде, но и от имени объекта предоставляет реализации COM-интерфейсов, перечисленных в следующей таблице. Класс .NET может переопределять заданное по умолчанию поведение, предоставляя собственную реализацию этих интерфейсов. Но среда выполнения обязательно предоставляет реализацию интерфейсов IUnknown и IDispatch.
Интерфейс |
Описание |
---|---|
IDispatch |
Предоставляет механизм позднего связывания с типом. |
IErrorInfo |
Предоставляет текстовое описание ошибки, ее источник, файл справки, контекстную справку и значение GUID интерфейса, определившего ошибку (для классов .NET — всегда GUID_NULL). |
IProvideClassInfo |
Позволяет COM-клиентам получать доступ к интерфейсу ITypeInfo, реализованному управляемым классом. |
ISupportErrorInfo |
Позволяет COM-клиенту определить, поддерживает ли управляемый объект интерфейс IErrorInfo. Если интерфейс поддерживается, позволяет клиенту получить указатель на последний по времени объект исключения. Интерфейс IErrorInfo поддерживается всеми управляемыми типами. |
ItypeInfo |
Предоставляет для класса сведения о типе, которые в точности совпадают со сведениями о типе, предоставленными программой Tlbexp.exe. |
IUnknown |
Предоставляет стандартную реализацию интерфейса IUnknown, с помощью которого COM-клиент управляет временем жизни вызываемой оболочки COM и обеспечивает приведение типов. |
Управляемый класс также может предоставлять COM-интерфейсы, описанные в следующей таблице.
Интерфейс |
Описание |
---|---|
Интерфейс класса (_имя_класса) |
Интерфейс, не определенный явным образом и предоставляемый средой выполнения, который обеспечивает доступ ко всем открытым интерфейсам, методам, свойствам и полям, явно предоставляемым в управляемом объекте. |
IConnectionPoint и IconnectionPointContainer |
Интерфейс для объектов, которые являются источниками событий на основе делегатов (интерфейс для регистрации подписчиков событий). |
IDispatchEx |
Интерфейс, предоставленный средой выполнения, если класс реализует интерфейс IExpando. Интерфейс IDispatchEx является расширением интерфейса IDispatch, который, в отличие от интерфейса IDispatch, позволяет осуществлять перечисление, добавление, удаление и вызов членов с учетом регистра. |
IEnumVARIANT |
Интерфейс для классов типа "коллекция", в которых перечислены объекты коллекции, если класс реализует интерфейс IEnumerable. |
См. также
Основные понятия
Предоставление COM-клиентам доступа к компонентам .NET Framework