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


структура BIND_OPTS3 (objidl.h)

Содержит параметры, используемые в операции привязки моникера.

Синтаксис

typedef struct tagBIND_OPTS3 {
  DWORD        cbStruct;
  DWORD        grfFlags;
  DWORD        grfMode;
  DWORD        dwTickCountDeadline;
  DWORD        dwTrackFlags;
  DWORD        dwClassContext;
  LCID         locale;
  COSERVERINFO *pServerInfo;
  HWND         hwnd;
} BIND_OPTS3, *LPBIND_OPTS3;

Члены

cbStruct

Размер этой структуры в байтах.

grfFlags

Флаги, управляющие аспектами операций привязки моникера. Это значение представляет собой любое сочетание битовых флагов в перечислении BIND_FLAGS . Функция CreateBindCtx инициализирует этот элемент равным нулю.

grfMode

Флаги, которые должны использоваться при открытии файла, содержащего объект, определенный моникером. Возможные значения — константы STGM. Операция привязки использует эти флаги в вызове IPersistFile::Load при загрузке файла. Если объект уже запущен, эти флаги игнорируются операцией привязки. Функция CreateBindCtx инициализирует это поле для STGM_READWRITE.

dwTickCountDeadline

Время, к которому вызывающий объект хочет, чтобы операция привязки была завершена, в миллисекундах. Этот элемент позволяет вызывающей стороны ограничить время выполнения операции, когда скорость имеет первостепенное значение. Нулевое значение указывает на отсутствие крайнего срока. Вызывающие абоненты чаще всего используют эту возможность при вызове метода IMoniker::GetTimeOfLastChange , хотя ее можно применить и к другим операциям. Функция CreateBindCtx инициализирует это поле нулевым значением.

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

Если операция привязки превышает свой крайний срок, так как один или несколько необходимых объектов не выполняются, реализация моникера должна зарегистрировать объекты, ответственные в контексте привязки, с помощью IBindCtx::RegisterObjectParam. Объекты должны быть зарегистрированы под именами параметров "ExceededDeadline", "ExceededDeadline1", "ExceededDeadline2" и т. д. Если позднее вызывающий объект находит объект в таблице выполняющихся объектов, вызывающий объект может повторить операцию привязки.

Функция GetTickCount указывает количество миллисекунд с момента запуска системы и выполняет перенос обратно к нулю после 2^31 миллисекунд. Следовательно, вызывающим абонентам следует быть осторожными, чтобы непреднамеренно не передать нулевое значение (что указывает на отсутствие крайнего срока), а реализации моникеров должны учитывать проблемы с переносом часов.

dwTrackFlags

Моникер может использовать это значение во время отслеживания ссылок. Если исходные сохраненные данные, на которые ссылается моникер, были перемещены, моникер может попытаться восстановить связь, выполнив поиск исходных данных с помощью соответствующего механизма. Этот член предоставляет дополнительные сведения о том, как должна быть разрешена ссылка. См. документацию по параметру fFlags в разделе IShellLink::Resolve.

Реализация файлового моникера COM использует механизм ссылки оболочки для повторного создания ссылок и передает эти флаги в IShellLink::Resolve.

dwClassContext

Контекст класса, взятый из перечисления CLSCTX , который будет использоваться для создания экземпляра объекта . Моникеры обычно передают это значение параметру dwClsContextобъекта CoCreateInstance.

locale

Значение LCID, указывающее предпочтения клиента для языкового стандарта, используемого объектом, к которому они привязаны. Моникер передает это значение в IClassActivator::GetClassObject.

pServerInfo

Указатель на структуру COSERVERINFO . Этот член позволяет клиентам, вызывающим IMoniker::BindToObject , указывать сведения о сервере. Клиенты могут передавать структуру BIND_OPTS2 методу IBindCtx::SetBindOptions . Если имя сервера указано в структуре COSERVERINFO , привязка моникера будет перенаправлена на указанный компьютер. SetBindOptions копирует только элементы структуры BIND_OPTS2, но не структуру COSERVERINFO и содержащиеся в ней указатели. Вызывающие операторы не могут освобождать эти указатели до тех пор, пока контекст привязки не будет освобожден. Новый моникер класса COM в настоящее время не учитывает флаг pServerInfo .

hwnd

Дескриптор окна, который становится владельцем пользовательского интерфейса повышения прав, если применимо. Если hwnd имеет значение NULL, COM вызовет функцию GetActiveWindow , чтобы найти дескриптор окна, связанный с текущим потоком. Это может произойти, если клиент является скриптом, который не может заполнить структуру BIND_OPTS3 . В этом случае COM попытается использовать окно, связанное с потоком скрипта.

Комментарии

Структура BIND_OPTS3 хранится в контексте привязки; один и тот же контекст привязки используется каждым компонентом составного моникера во время привязки, что позволяет передавать одинаковые параметры всем компонентам составного моникера. Дополнительные сведения о контекстах привязки см. в разделе IBindCtx .

Клиенты моникера (используют моникер для получения указателя интерфейса на объект) обычно не нужно указывать значения для членов этой структуры. Функция CreateBindCtx создает контекст привязки с параметрами привязки, заданными значениями по умолчанию, которые подходят для большинства ситуаций; Функция BindMoniker выполняет то же самое при создании контекста привязки для использования в моникере привязки. Если вы хотите изменить значения этих параметров привязки, это можно сделать, передав структуру BIND_OPTS3 методу IBindCtx::SetBindOptions . Реализации моникеров могут передавать структуру BIND_OPTS3 методу IBindCtx::GetBindOptions для получения значений этих параметров привязки.

Требования

Требование Значение
Минимальная версия клиента сборка Windows 10 20348
Минимальная версия сервера сборка Windows 10 20348
Верхняя часть objidl.h

См. также раздел

CreateBindCtx

IBindCtx

IMoniker