Метод IMoniker::BindToStorage (objidl.h)
Привязывается к хранилищу для указанного объекта. В отличие от метода IMoniker::BindToObject , этот метод не активирует объект, определенный моникером.
Синтаксис
HRESULT BindToStorage(
[in] IBindCtx *pbc,
[in] IMoniker *pmkToLeft,
[in] REFIID riid,
[out] void **ppvObj
);
Параметры
[in] pbc
Указатель на интерфейс IBindCtx объекта контекста привязки, который используется в этой операции привязки. Контекст привязки кэширует объекты, привязанные к процессу привязки, содержит параметры, которые применяются ко всем операциям, использующим контекст привязки, и предоставляет средства, с помощью которых реализация моникера должна извлекать сведения о своей среде.
[in] pmkToLeft
Если моникер является частью составного моникера, указатель на моникер слева от этого моникера. Этот параметр в основном используется средствами реализации моникера для обеспечения взаимодействия между различными компонентами составного моникера. Клиенты моникера должны использовать значение NULL.
[in] riid
Ссылка на идентификатор запрошенного интерфейса хранилища, указатель которого будет возвращен в ppvObj. Часто запрашиваемые интерфейсы хранилища включают IStorage, IStream и ILockBytes.
[out] ppvObj
Адрес переменной указателя, получающей указатель интерфейса, запрошенный в riid. После успешного возврата *ppvObj содержит запрошенный указатель интерфейса на хранилище объекта, который идентифицирует моникер. При успешном выполнении реализация должна вызвать AddRef для хранилища. Вызов Release лежит на вызывающем объекте. При возникновении ошибки значение *ppvObj должно иметь значение NULL.
Возвращаемое значение
Этот метод может возвращать стандартные возвращаемые значения E_UNEXPECTED, а также следующие значения.
Код возврата | Описание |
---|---|
|
Операция привязки выполнена успешно. |
|
Объект, идентифицируемый этим моникером, не имеет собственного хранилища. |
|
Операция привязки не может быть завершена в течение срока, заданного структурой BIND_OPTS контекста привязки. |
|
Операции не удалось подключиться к хранилищу, возможно, из-за того, что не удалось подключить сетевое устройство. Дополнительные сведения см. в разделе IMoniker::BindToObject. |
|
Был найден промежуточный объект, но он не поддерживал интерфейс, необходимый для выполнения операции привязки. Например, моникер элемента возвращает это значение, если его контейнер не поддерживает интерфейс IOleItemContainer . |
|
Не удается получить доступ к объекту хранилища. |
Этот метод также может возвращать ошибки, связанные с методом IOleItemContainer::GetObject .
Комментарии
Существует важное различие между методами BindToObject и BindToStorage . Если, например, у вас есть моникер, идентифицирующий объект электронной таблицы, вызов BindToObject обеспечивает доступ к самому объекту электронной таблицы, а вызов BindToStorage — доступ к объекту хранилища, в котором находится электронная таблица.
Примечания к вызывающим абонентам
Хотя ни один из классов моникеров COM не вызывает этот метод в своих операциях привязки, может быть целесообразно вызвать его в реализации нового класса моникера. Этот метод можно вызвать в реализации BindToObject , которая требует сведений от объекта, определяемого параметром pmkToLeft , и может получить их из постоянного хранилища объекта без активации. Например, если моникеры используются для идентификации объектов, которые можно активировать без активации их контейнеров, этот метод может оказаться полезным.Клиент, который может считывать хранилище объекта, идентифицирующий его моникер, также может вызвать этот метод.
Примечания для разработчиков
Реализация должна найти постоянное хранилище для объекта, определяемого текущим моникером, и вернуть нужный указатель интерфейса. Некоторые типы моникеров представляют псевдо-объекты, которые являются объектами, не имеющими собственного постоянного хранилища. Такие объекты составляют часть внутреннего состояния контейнера, например диапазон ячеек в электронной таблице. Если класс моникера идентифицирует этот тип объекта, реализация BindToStorage должна возвращать ошибку MK_E_NOSTORAGE.Если в структуре BIND_OPTS контекста привязки указан флаг BINDFLAGS_JUSTTESTEXISTENCE, реализация имеет возможность возвращать значение NULL в ppvObj (хотя флаг можно также игнорировать и выполнить полную операцию привязки).
Примечания по реализации
Реализация | Примечания |
---|---|
Антимоникер | Этот метод возвращает E_NOTIMPL. |
Моникер класса | Этот метод перенаправляет в моникер класса BindToObject. |
Файловый моникер | Этот метод открывает файл, указанный путем, представленным моникером, и возвращает указатель IStorage на этот файл. Метод поддерживает привязку только к интерфейсу IStorage ; Если IStream или ILockBytes запрашивается в riid, метод возвращает E_UNSPEC, а если запрашиваются другие интерфейсы, этот метод возвращает E_NOINTERFACE. Если pmkToLeft не является моникером класса, pmkToLeft должен иметь значение NULL, как в реализации IMoniker::BindToObject. |
Универсальный составной моникер | Этот метод рекурсивно вызывает BindToStorage в крайнем правом компоненте составного компонента, передавая остальную часть составной части в качестве параметра pmkToLeft для этого вызова. |
Моникер элемента | Если значение pmkToLeft равно NULL, этот метод возвращает E_INVALIDARG. В противном случае метод вызывает IMoniker::BindToObject для параметра pmkToLeft , запрашивая указатель интерфейса IOleItemContainer . Затем метод вызывает IOleItemContainer::GetObjectStorage для запрошенного интерфейса. |
Моникер OBJREF | Этот метод получает маршалированные указатели на запрошенный интерфейс в хранилище, которое содержит выполняющийся объект. Так как моникер OBJREF представляет выполняющийся объект, активация не выполняется. Если представленный объект больше не выполняется, BindToStorage завершается сбоем с E_UNEXPECTED. |
Моникер указателя | Этот метод запрашивает заключенный в оболочку указатель для запрошенного интерфейса. |
Моникер URL-адреса |
Системная реализация моникеров URL-адресов поддерживает BindToStorage для потоковых объектов по всем URL-адресам и для объектов хранения в случае, когда назначенный ресурс является составным файлом.
Так как моникер URL-адреса поддерживает асинхронную привязку, фактическое возвращаемое значение BindToStorage может отличаться в зависимости от параметров объекта, установленных в контексте привязки. Однако семантика операции привязки идентична независимо от синхронного или асинхронного использования, как показано ниже.
|
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | objidl.h |