Jump to content

IНеизвестно

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

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

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

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

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

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

Разнообразный

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

См. также

[ редактировать ]
  1. ^ Спецификация объектной модели компонентов , заархивировано из оригинала 15 февраля 2004 г.
  2. ^ «Компонентная объектная модель» . microsoft.com . Майкрософт. 30 мая 2018 года . Проверено 12 февраля 2019 г.
  3. ^ IНеизвестное определение на microsoft.com. Архивировано 11 июля 2013 г. на Wayback Machine ; по состоянию на 18 января 2008 г.
  4. ^ Элементы управления ActiveX на microsoft.com ; по состоянию на 18 января 2008 г.
  5. ^ Плагины на apple.com ; по состоянию на 18 сентября 2011 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: c73f0a21247da0f18af83a3bbff87dbd__1655616900
URL1:https://arc.ask3.ru/arc/aa/c7/bd/c73f0a21247da0f18af83a3bbff87dbd.html
Заголовок, (Title) документа по адресу, URL1:
IUnknown - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)