Метод IPrintTicketProvider::BindPrinter (prdrvcom.h)
Метод IPrintTicketProvider::BindPrinter привязывает принтер или очередь печати к определенной версии схемы билета печати, которая позволяет основному драйверу связать набор универсальных идентификаторов ресурса частного пространства имен (URI) с устройством.
Синтаксис
HRESULT BindPrinter(
[in] IN HANDLE hPrinter,
[in] IN INT version,
[out] OUT PSHIMOPTS pOptions,
[out] OUT DWORD *pDevModeFlags,
[out] OUT INT *cNamespaces,
[out] OUT BSTR **ppNamespaces
);
Параметры
[in] hPrinter
Дескриптор печати spooler, который поставляется основным драйвером. Поставщик не должен закрывать этот дескриптор в любое время, так как клиент поставщика отвечает за управление временем существования этого дескриптора. Поставщик может кэшировать дескриптор печати; все будущие вызовы относятся к принтеру, связанному с этим дескриптором.
[in] version
Основной номер версии билета на печать или схему билета печати, которую диспетчер билетов печати запрашивает у поставщика подключаемого модуля OEM для поддержки. Windows Vista поддерживает только версию 1. Поставщику не удалось выполнить привязку к версии, которую она не поддерживает или распознает.
[out] pOptions
Указатель на переменную, которая получает одно из следующих перечисленных значений:
PTSHIM_DEFAULT
Система помещает двоичную кодировку (двоичный большой объект) частной части DEVMODEW в билет печати при преобразовании DEVMODEW в билет печати.
PTSHIM_NOSNAPSHOT
Система не будет размещать двоичную кодировку (BLOB) частной части структуры DEVMODEW в билет печати при преобразовании DEVMODEW в билет печати. Используйте это значение, если все общедоступные и частные DEVMODEW члены полностью представлены в билете на печать.
[out] pDevModeFlags
Указатель на переменную типа DWORD, которая получает набор битовых флагов, указывающих, какие общедоступные DEVMODEW члены не должны обрабатываться с помощью примыка билета печати в DEVMODEW-to-print ticket или печати запросов в DEVMODEW. Битовый флаг, который присутствует в этом параметре, указывает, что принтер не поддерживает связанный член DEVMODEW или что поставщик обрабатывает характеристику DEVMODEW. Например, если DM_MEDIATYPE задано в *pDevModeFlags, принтер не поддерживает несколько типов носителей или поставщик отвечает за поддержку нескольких типов носителей. (Все DM_XXX битовые флаги определены в wingdi.h и описаны в пакете SDK для Microsoft Windows.) По умолчанию набор запросов печати обрабатывает все члены, представленные в dmFlags, член структуры по умолчанию DEVMODEW.
[out] cNamespaces
Указатель на переменную, которая получает количество URI частного пространства имен, используемых в подключаемом модуле. Это число представляет количество строк в массиве, на которое указывает ppNamespaces.
[out] ppNamespaces
Указатель на переменную, которая получает адрес первого элемента массива BSTR. Подключаемый модуль заполняет каждое положение массива URI пространства имен. Дополнительные сведения об этом параметре см. в следующем разделе "Примечания".
Возвращаемое значение
IPrintTicketProvider::BindPrinter должен возвращать одно из следующих значений:
Возвращаемый код | Описание |
---|---|
S_OK | Операция завершилась успешно. |
E_VERSION_NOT_SUPPORTED | Подключаемый модуль не поддерживает версию схемы печати, указанную в параметре версии. |
Замечания
Привязка к устройству позволяет поставщику кэшировать определенные объекты и обрабатывать их, необходимые для будущих служб печати или возможностей устройств на этом устройстве. Например, дескриптор принтера в параметре hPrinter можно кэшировать. Метод IPrintTicketProvider::BindPrinter гарантированно вызывается только один раз.
Драйвер отвечает за выделение памяти для массива, на который указывает параметр ppNamespaces и строки URI пространства имен. Массив должен быть выделен с помощью функции CoTaskMemAlloc; Строки пространства имен следует выделить с помощью функции SysAllocString. Обе функции описаны в документации по пакету SDK для Windows. Массив, на который указывает параметр ppNamespaces, не требуется содержать пространства имен для ключевых слов схемы печати или платформы схемы печати.
Объект IPrintTicketProvider не должен быть в состоянии привязать несколько раз. Диспетчер билетов печати всегда использует разные экземпляры объектов IPrintTicketProvider для привязки к разным устройствам. Все ресурсы, приобретенные в успешном вызове IPrintTicketProvider::BindPrinter, должны быть освобождены, если количество ссылок объекта IPrintTicketProvider равно нулю. Обратите внимание, что поставщик не должен закрывать дескриптор, переданный в вызов BindPrinter. Диспетчер билетов печати может создать несколько поставщиков для одного устройства в разных версиях, если поддерживаются несколько версий.
Требования
Требование | Ценность |
---|---|
заголовка | prdrvcom.h (include Prdrvcom.h) |
См. также
IPrintTicketProvider::ConvertDevModeToPrintTicket