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


Функция 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)