Метод 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) |