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