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


Метод IWiaMiniDrv::d rvAcquireItemData (wiamindr_lh.h)

Метод IWiaMiniDrv::d rvAcquireItemData вызывается службой WIA для передачи данных с устройства в приложение.

Синтаксис

HRESULT drvAcquireItemData(
  BYTE                      *__MIDL__IWiaMiniDrv0009,
  LONG                      __MIDL__IWiaMiniDrv0010,
  PMINIDRV_TRANSFER_CONTEXT __MIDL__IWiaMiniDrv0011,
  LONG                      *__MIDL__IWiaMiniDrv0012
);

Параметры

__MIDL__IWiaMiniDrv0009

lFlags [in]

Зарезервировано.

__MIDL__IWiaMiniDrv0010

pWiasContext [in]

Указатель на контекст элемента WIA.

__MIDL__IWiaMiniDrv0011

plDevErrVal [out]

Указывает на расположение памяти, которое получит код состояния для этого метода. Если этот метод возвращает S_OK, сохраненное значение будет равно нулю. В противном случае код ошибки, относящейся к мини-накопителю, будет храниться в расположении, на которое указывает этот параметр.

__MIDL__IWiaMiniDrv0012

pmdtc [in, out]

Указывает на структуру MINIDRV_TRANSFER_CONTEXT , содержащую контекст передачи устройства. Структура MINIDRV_TRANSFER_CONTEXT содержит параметры, относящиеся к передаваемым данным.

Возвращаемое значение

При успешном выполнении метод должен вернуть S_OK и очистить значение ошибки устройства, на которое указывает plDevErrVal. Если передача была отменена, метод должен вернуть S_FALSE. Если метод завершается сбоем, он должен вернуть стандартный код ошибки COM и заполнить в памяти, на которую указывает plDevErrVal, значение кода ошибки, зависящее от мини-драйвера. Раздел Примечания содержит дополнительные сведения о возвращаемом значении, применимые к проверке ADF.

Комментарии

Существует два main типа передачи данных: на основе памяти и на основе файлов. Служба WIA указывает, какой тип должен быть выполнен с помощью параметра pmdtc-->tymed, который будет TYMED_CALLBACK или TYMED_MULTIPAGE_CALLBACK для передачи на основе памяти, а TYMED_FILE или TYMED_MULTIPAGE_FILE для передачи файлов. Дополнительные сведения об этих константах см. в разделе WIA_IPA_TYMED.

  • Для передачи на основе памяти буфер может быть выделен или еще не выделен, как указано значением в pmdtc-->bClassDrvAllocBuf. Служба WIA может передавать до двух буферов в мини-диск, но обычно передает только один. Количество буферов задается значением в pmdtc-->lNumBuffers. Если память для буфера еще не выделена, мини-диск должен выделить ее с помощью любого из обычных средств, таких как CoTaskMemAlloc или new. Если мини-диск выделяет буфер, он также несет ответственность за освобождение буфера.

  • Для передачи файлов minidriver должен сначала записать данные в буфер, переданный в вызове этого метода службы WIA, а затем вызвать wiasWritePageBufToFile , чтобы записать данные буфера в файл. Мини-driver не должен пытаться использовать дескриптор файла, указанный в pmdtc-->hFile , для записи данных в файл.

Периодически мини-driver должен вызывать метод IWiaMiniDrvCallBack::MiniDrvCallback в интерфейсе COM на с помощью pdmtc--pIWiaMiniDrvCallBack>, чтобы обновить состояние передачи. Для передачи на основе памяти эта функция используется для передачи данных обратно в приложение. Частота вызова этой функции остается на мини-накопителе, но она должна вызываться примерно десять раз или примерно один раз в секунду во время передачи, в зависимости от того, какая из них чаще.

Ниже перечислены другие параметры передачи, которые предоставляет служба WIA.

  • pmdtc-->guidFormatID — формат данных

  • pmdtc-->lCompression — используемый тип сжатия.

Потенциальной проблемой для сканеров, оснащенных ADF, является отсутствие бумаги во время операции сканирования. Значение HRESULT, возвращаемое реализацией IWiaMiniDrv::d rvAcquireItemData , зависит от текущего параметра свойства WIA_DPS_PAGES средства проверки и от того, были ли все страницы правильно отсканированы. Используйте следующие правила, чтобы определить подходящий HRESULT для возврата в этом методе.

Сценарий Значение HRESULT
Для свойства WIA_DPS_PAGES задано значение 0, и сканер очистил ADF без ошибок.
Свойству WIA_DPS_PAGES присвоено значение N (где N > 0), а средство проверки обработало N страниц без ошибок.
S_OK
Для свойства WIA_DPS_PAGES было задано значение N, и средство проверки обработало по крайней мере одну страницу, но закончилась бумага перед обработкой всех N страниц. WIA_STATUS_END_OF_MEDIA
Сканер неожиданно обнаружил несколько веб-каналов страниц, остановил сканирование и настроил WIA_DPS_DOCUMENT_HANDLING_STATUS на MULTIPLE_FEED. WIA_ERROR_MULTI_FEED
На первом сканировании на сканере закончилась бумага, независимо от настройки свойства WIA_DPS_PAGES.
Во время операции сканирования произошла ошибка бумаги или другая ошибка.
Другой код ошибки

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть wiamindr_lh.h (включая Wiamindr.h)

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

IWiaMiniDrv

IWiaMiniDrv::d rvGetDeviceErrorStr

MINIDRV_TRANSFER_CONTEXT

wiasGetImageInformation