Поделиться через


Асинхронные и синхронные моникеры

Клиент стандартного, синхронного моникера OLE обычно создает и содержит ссылку на моникер, а также контекст привязки, используемый во время привязки. Компоненты, участвующие в использовании традиционных моникеров, показаны на следующей схеме.

Diagram that shows the Client connected to either Bind Context or Any Moniker for the System-Provided.

Клиенты обычно создают стандартные моникеры путем вызова таких функций, как CreateFileMoniker, CreateItemMoniker или CreatePointerMoniker или, так как их можно сохранить в постоянном хранилище с помощью OleSaveToStream и OleLoadFromStream. Моникеры также могут быть получены из объекта контейнера путем вызова метода IBindHost::CreateMoniker. Клиенты создают контексты привязки путем вызова функции CreateBindCtx, а затем передают контекст привязки моникеру с вызовами IMoniker::BindTo служба хранилища или IMoniker::BindToObject.

Как показано на следующей схеме, клиент асинхронного моникера также создает и содержит ссылку на моникер и контекст привязки, используемый во время привязки.

Diagram that shows the connections between Client-Provided, Monker-Provided, and System-Provided.

Чтобы получить асинхронное поведение, клиент реализует интерфейс IBindStatusCallback в объекте вызова bind-status-callback и вызывает функцию RegisterBindStatusCallback или функцию CreateAsyncBindCtx для регистрации этого интерфейса в контексте привязки. Моникер передает указатель на его интерфейс IBinding в вызове метода IBindStatusCallback::OnStartBinding. Клиент сообщает асинхронный моникер, как он хочет привязаться к вызову моникера к методу IBindStatusCallback::GetBindInfo.

Асинхронные моникеры