Реализация интерфейса IUnknown
Область применения: Outlook 2013 | Outlook 2016
Методы интерфейса IUnknown , реализованные в каждом объекте MAPI, поддерживают взаимодействие между объектами и управление объектами.
IUnknown имеет три метода: IUnknown::AddRef, IUnknown::QueryInterface и IUnknown::Release. QueryInterface позволяет одному объекту определить, поддерживает ли другой объект определенный интерфейс. С помощью QueryInterface могут взаимодействовать два объекта без предварительного знания функциональных возможностей друг друга. Если объект, реализующий QueryInterface , поддерживает рассматриваемый интерфейс, он возвращает указатель на реализацию интерфейса. Если объект не поддерживает запрошенный интерфейс, он возвращает значение MAPI_E_INTERFACE_NOT_SUPPORTED.
Когда QueryInterface возвращает запрошенный указатель интерфейса, он также должен увеличить число ссылок нового объекта. Число ссылок объекта — это числовое значение, используемое для управления сроком существования объекта. Если число ссылок больше 1, память объекта не может быть освобождена, так как она активно используется. Только когда число ссылок падает до 0, объект можно освободить безопасно.
Два других метода IUnknown , AddRef и Release, управляют количеством ссылок. AddRef увеличивает количество ссылок, а Release уменьшает его. Все методы или функции API, возвращающие указатели интерфейса, такие как QueryInterface, должны вызывать AddRef , чтобы увеличить количество ссылок. Все реализации методов, получающих указатели интерфейса, должны вызывать release , чтобы уменьшать число, когда указатель больше не нужен. Выпуск проверяет существующее количество ссылок, освобождая память, связанную с интерфейсом, только если счетчик равен 0.
Примечание.
Так как addRef и Release не требуются для возврата точных значений, вызывающие эти методы не должны использовать возвращаемые значения, чтобы определить, является ли объект по-прежнему допустимым или был уничтожен.