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


Метод 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, сохраненное значение будет равно нулю. В противном случае код ошибки для мини-driver будет храниться в расположении, на которое указывает этот параметр.

__MIDL__IWiaMiniDrv0012

pmdtc [in, out]

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

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

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

Замечания

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

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

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

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

К другим параметрам передачи, которые предоставляет служба 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