IНеизвестно - IUnknown

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

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

Методы

Интерфейс IUnknown предоставляет три методы: QueryInterface, AddRef, и Релиз:[3]

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

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

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

Разное

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

Смотрите также

Рекомендации

  1. ^ Спецификация модели компонентных объектов, заархивировано из оригинал на 2004-02-15
  2. ^ «Модель компонентных объектов». microsoft.com. Microsoft. 30 мая 2018. Получено 12 февраля 2019.
  3. ^ I Неизвестное определение в microsoft.com В архиве 2013-07-11 в Wayback Machine; доступ 18 января 2008 г.
  4. ^ Элементы управления ActiveX в microsoft.com; доступ 18 января 2008 г.
  5. ^ Плагины в apple.com; доступ 18 сентября 2011 г.

внешняя ссылка