IНеизвестно

редактировать

В компьютерном программировании интерфейс IUnknown является основным интерфейсом в модели компонентных объектов (COM). Спецификация COM требует, чтобы объекты COM реализовали этот интерфейс. Кроме того, все остальные COM-интерфейсы должны быть производными от IUnknown. IUnknown предоставляет две основные функции всех COM-объектов: управление временем жизни объекта с помощью подсчета ссылок и доступ к функциям объекта через другие интерфейсы.

Интерфейс IUnknown (или производный от IUnknown) состоит из указателя в таблицу виртуальных методов, которая содержит список указателей на функции, реализующие функции, объявленные в интерфейсе, в том порядке, в котором они объявлены в интерфейсе. Таким образом, накладные расходы на вызовы внутри процесса идентичны вызовам виртуальных методов в C ++.

Содержание

  • 1 Методы
  • 2 Разное
  • 3 См. Также
  • 4 Ссылки
  • 5 Внешние ссылки

Методы

Интерфейс IUnknown предоставляет три метода : QueryInterface, AddRefи Release:

  • QueryInterfaceпозволяет вызывающий объект для получения ссылок на интерфейсы, которые реализует компонент. Это похоже на dynamic_cast <>в C ++ или приведения в Java и C #. В частности, он используется для получения указателя на другой интерфейс, учитывая GUID, который однозначно идентифицирует этот интерфейс (обычно известный как идентификатор интерфейса или IID ). Если COM-объект не реализует этот интерфейс, вместо этого возвращается ошибка E_NOINTERFACE.
  • AddRefиспользуется для увеличения счетчика ссылок, когда новый клиент получает объект. Он возвращает новый счетчик ссылок.
  • Releaseиспользуется для уменьшения счетчика ссылок, когда клиенты завершили использование объекта. Он возвращает новый счетчик ссылок. Объект удалит себя во время выпуска, когда счетчик ссылок достигнет нуля, что означает, что вызывающая сторона никогда не должна использовать интерфейс после вызова Release.
interface IUnknown {virtual HRESULT QueryInterface (REFIID riid, void ** ppvObject) = 0; виртуальный ULONG AddRef () = 0; виртуальный выпуск ULONG () = 0; };

IUnknownидентификатор интерфейса определяется как GUID со значением {00000000-0000-0000-C000-000000000046}.

Интерфейсы COM-компонента должны демонстрировать рефлексивные, симметричные и транзитивные свойства. Reflexive свойство относится к способности вызова QueryInterfaceна заданном интерфейсе с идентификатором интерфейса, чтобы вернуть тот же экземпляр интерфейса. Симметричное свойство требует, чтобы, когда интерфейс B извлекался из интерфейса A через QueryInterface, интерфейс A также извлекался из интерфейса B. Транзитивное свойство требует, чтобы, если интерфейс B можно получить из интерфейса A, а интерфейс C можно получить из интерфейса B, то интерфейс C должен быть получен из интерфейса A.

Разное

  • Компоненты, разработанные под ActiveX стандарт визуальных компонентов должен, как минимум, реализовывать интерфейс IUnknown.
  • IUnknown служит основой для Mac OS X Core Foundation CFPlugIn framework.
  • В модели компонентов Mozilla XPCOM этот интерфейс также известен как nsISupports.

См. Также

Ссылки

Внешние ссылки

Последняя правка сделана 2021-05-23 08:50:05
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте