Доступ к интерфейсам подключаемых модулей из драйверов принтера
Внимание
Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" Microsoft IPP вместе с приложениями поддержки печати (PSA), чтобы настроить возможности печати в Windows 10 и 11 для разработки устройств принтера.
Дополнительные сведения см. в статье "Современная платформа печати" и руководство по проектированию приложений поддержки печати.
Если установлен подключаемый модуль пользовательского интерфейса или модуль отрисовки, драйвер принтера (Unidrv или Pscript5) использует следующую последовательность вызовов для получения доступа к интерфейсу IPrintOemUI, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni3, IPrintOemUni3, IPrintOemPS или IPrintOemPS2 COM:
Драйвер вызывает LoadLibrary для загрузки библиотеки DLL подключаемого модуля, что приводит к вызову функции подключаемого модуля
DllMain
.Драйвер вызывает функцию подключаемого
DllGetClassObject
модуля, которая возвращает указатель на интерфейс IClassFactory подключаемого модуля.Драйвер вызывает метод CreateInstance интерфейса IClassFactory, указав идентификатор интерфейса IID_IUnknown, который приводит к созданию экземпляра интерфейса iPrintOemFactory, IPrintOemUI2, IPrintOemUI2, IPrintOemUni, IPrintOemUni2, IPrintOemUni2, IPrintOemUni3, IPrintOemUni3, IPrintOemPS или IPrintOemPS2 и возврат указателя на интерфейс IUnknown экземпляра.
Драйвер вызывает метод QueryInterface интерфейса IUnknown, чтобы определить, какая версия интерфейса IPrintOemUI, IPrintOemUI2, IPrintOemUni2, IPrintOemUni2, IPrintOemUni2, IPrintOemUni3, IPrintOemPS или IPrintOemPS2 поддерживается подключаемым модулем и получать указатель на поддерживаемый интерфейс.
Драйвер вызывает метод подключаемого интерфейса для создания интерфейса
PublishDriverInterface
IPrintOemDriverUI, IPrintCoreUI2, IPrintOemDriverUni, IPrintOemDriverUni, IPrintOemDriverPS или IPrintCorePS2, доступных для подключаемого модуля.Если подключаемый модуль реализовал интерфейс IPrintOemUni, драйвер вызывает IPrintOemUni::GetImplementedMethod, чтобы определить, какие методы интерфейса были реализованы. Аналогичным образом, если подключаемый модуль реализовал интерфейс IPrintOemUni2 , драйвер вызывает IPrintOemUni2::GetImplementedMethod для той же цели.