Функция DrvConvertDevMode (winddiui.h)
Функция DrvConvertDevMode в интерфейсе принтера преобразует структуру DEVMODEW принтера из одной версии в другую.
Синтаксис
BOOL DrvConvertDevMode(
[in] LPTSTR pPrinterName,
[in] PDEVMODE pdmIn,
[out] PDEVMODE pdmOut,
[in, out] PLONG pcbNeeded,
[in] DWORD fMode
);
Параметры
[in] pPrinterName
Предоставленный вызывающим абонентом указатель на строку имени принтера. Дополнительные сведения об этом параметре см. в следующем разделе Примечания.
[in] pdmIn
Предоставленный вызывающим оператором указатель на входную структуру DEVMODEW. Если fMode имеет значение CDM_DRIVER_DEFAULT, этот указатель имеет значение NULL.
[out] pdmOut
Предоставленный вызывающим объектом указатель на буфер для получения выходной структуры DEVMODEW. Если fMode CDM_CONVERT буфер содержит допустимую структуру DEVMODEW, указывающую целевую версию драйвера.
[in, out] pcbNeeded
Предоставленный вызывающим объектом указатель на размер (в байтах) буфера, на который указывает pdmOut. В выходных данных библиотека DLL интерфейса принтера должна перезаписать полученное значение размера фактическим размером преобразованной структуры DEVMODEW. Если полученный буфер слишком мал, библиотека DLL интерфейса принтера должна перезаписать полученное значение размера требуемым размером буфера.
[in] fMode
Битовый флаг, предоставленный вызывающим абонентом, указывающий тип выполняемой операции. Это может быть один из следующих флагов:
CDM_CONVERT
Функция должна преобразовать содержимое входной структуры DEVMODEW (на которую указывает pdmIn) в новую структуру DEVMODEW и поместить результат в структуру DEVMODEW, на которую указывает pdmOut. Для определения выходной версии следует использовать начальное содержимое полученной выходной структуры DEVMODEW (на которую указывает pdmOut).
CDM_CONVERT351
Функция должна преобразовать содержимое входной структуры DEVMODEW (на которую указывает pdmIn), создав выходную структуру DEVMODEW, совместимую с Windows NT 3.51, и поместить результат в структуру DEVMODEW, на которую указывает pdmOut.
Если драйвер не поддерживает структуру DEVMODEW для Windows NT 3.51, функция должна преобразовать входные данные DEVMODEW в текущую версию.
CDM_DRIVER_DEFAULT
Функция должна скопировать текущую версию своей структуры DEVMODEW по умолчанию в буфер, на который указывает pdmOut.
Возвращаемое значение
Если операция выполнена успешно, функция должна возвращать значение TRUE; В противном случае он должен вызвать SetLastError, чтобы задать код ошибки, и вернуть значение FALSE.
Комментарии
В среде клиента или сервера клиент может работать под управлением одной версии операционной системы или драйвера принтера, а сервер (диспетчер очереди) работает под управлением другой. Это означает, что определение структуры DEVMODEW принтера может быть несогласованным между клиентом и сервером. Функция DrvConvertDevMode должна быть способна выполнять преобразования из одной версии структуры DEVMODEW принтера в другую.
При преобразовании из одной версии DEVMODEW в другую должны быть включены как общедоступные, так и частные члены DEVMODEW.
Имя принтера, на которое указывает pPrinterName, можно использовать в качестве входного аргумента функции OpenPrinter (описанной в документации по Microsoft Windows SDK), которую можно вызвать для получения сохраненных значений по умолчанию при получении флага CDM_DRIVER_DEFAULT. Обратите внимание, что строку имени принтера нельзя изменять каким-либо образом перед вызовом OpenPrinter. Кроме того, вызов OpenPrinter должен находиться в том же потоке, который использовался для вызова DrvConvertDevMode.
Функция должна убедиться, что pdmIn и pdmOut (если применимо) указывают на допустимые структуры DEVMODEW. В противном случае функция должна вызвать SetLastError(ERROR_INVALID_PARAMETER) и вернуть значение FALSE. Если размер выходных данных DEVMODEW, заданный параметром pcbNeeded , слишком мал, драйвер должен перезаписать значение размера, предоставленное pcbNeeded , требуемым размером буфера, вызвать Метод SetLastError(ERROR_INSUFFICIENT_BUFFER) и вернуть значение FALSE.
Функция DrvConvertDevMode выполняется в контексте очереди очереди и поэтому не должна отображать пользовательский интерфейс.
При вызове DrvConvertDevMode с указателем на структуру DEVMODEW NULL в параметре pdmOut для получения размера буфера драйвер должен задать для последней ошибки значение ERROR_INSUFFICIENT_BUFFER. Если последней ошибке не задано это значение, диспетчер очереди очереди предполагает общую ошибку.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | winddiui.h (включая Winddiui.h) |