Método IWiaMiniDrv::d rvAcquireItemData (wiamindr_lh.h)

El servicio WIA llama al método IWiaMiniDrv::d rvAcquireItemData para transferir datos desde el dispositivo a una aplicación.

Sintaxis

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

Parámetros

__MIDL__IWiaMiniDrv0009

lFlags [in]

Reservado.

__MIDL__IWiaMiniDrv0010

pWiasContext [in]

Puntero a un contexto de elemento WIA.

__MIDL__IWiaMiniDrv0011

plDevErrVal [out]

Apunta a una ubicación de memoria que recibirá un código de estado para este método. Si este método devuelve S_OK, el valor almacenado será cero. De lo contrario, este parámetro almacenará un código de error específico del minidriver en la ubicación a la que apunta este parámetro.

__MIDL__IWiaMiniDrv0012

pmdtc [in, out]

Apunta a una estructura de MINIDRV_TRANSFER_CONTEXT que contiene el contexto de transferencia de dispositivos. La estructura MINIDRV_TRANSFER_CONTEXT contiene parámetros que pertenecen a los datos que se van a transferir.

Valor devuelto

Si se ejecuta correctamente, el método debe devolver S_OK y borrar el valor de error del dispositivo al que apunta plDevErrVal. Si se canceló la transferencia, el método debe devolver S_FALSE. Si se produce un error en el método, debe devolver un código de error COM estándar y rellenar un valor de código de error específico del minidriver en la memoria a la que apunta plDevErrVal. La sección Comentarios tiene información adicional de valor devuelto que se aplica al examen de ADF.

Comentarios

Hay dos tipos principales de transferencia: basados en memoria y basados en archivos. El servicio WIA indica qué tipo se va a realizar mediante la configuración de pmdtc-->tymed, que se TYMED_CALLBACK o TYMED_MULTIPAGE_CALLBACK para las transferencias basadas en memoria y TYMED_FILE o TYMED_MULTIPAGE_FILE para las transferencias de archivos. Para obtener más información sobre estas constantes, consulte WIA_IPA_TYMED.

  • En el caso de las transferencias basadas en memoria, es posible que ya se haya asignado o no un búfer, como se indica en el valor de pmdtc-->bClassDrvAllocBuf. El servicio WIA puede pasar hasta dos búferes al minidriver, pero normalmente pasa solo uno. El número de búferes se especifica mediante el valor de pmdtc-->lNumBuffers. Si aún no se ha asignado memoria para el búfer, el minidriver debe asignarlo con cualquiera de los medios habituales, como CoTaskMemAlloc o nuevo. Si el minidriver asigna un búfer, también tiene la responsabilidad de liberar el búfer.

  • En el caso de las transferencias de archivos, el minidriver debe escribir primero los datos en el búfer pasado en la llamada del servicio WIA a este método y, a continuación, llamar a wiasWritePageBufToFile para escribir los datos del búfer en el archivo implicado. El minidriver no debe intentar usar el identificador de archivo especificado en pmdtc-->hFile para escribir los datos en el archivo.

Periódicamente, el minidriver debe llamar al método IWiaMiniDrvCallBack::MiniDrvCallback en la interfaz COM a por pdmtc-->pIWiaMiniDrvCallBack para actualizar el estado de la transferencia. Para las transferencias basadas en memoria, esta función se usa para volver a pasar los datos a la aplicación. Con qué frecuencia se debe llamar a esta función se deja al minidriver, pero se debe llamar a aproximadamente diez veces, o aproximadamente una vez por segundo durante la transferencia, lo que sea más a menudo.

Otros parámetros de transferencia que proporciona el servicio WIA incluyen los siguientes:

  • pmdtc-->guidFormatID : el formato de datos

  • pmdtc-->lCompression : el tipo de compresión utilizada

Un posible problema para escáneres equipados con ADF se está quedando sin papel durante una operación de examen. El VALOR HRESULT que devuelve la implementación de IWiaMiniDrv::d rvAcquireItemData depende del valor actual de la propiedad WIA_DPS_PAGES del analizador y de si todas las páginas se examinaron correctamente. Use las siguientes reglas para guiarle a la hora de determinar el VALOR HRESULT adecuado para devolverlo en este método.

Escenario Valor HRESULT
La propiedad WIA_DPS_PAGES se estableció en 0, y el analizador vacía su ADF sin errores.
La propiedad WIA_DPS_PAGES se estableció en N (donde N > 0) y el analizador procesó N páginas sin errores.
S_OK
La propiedad WIA_DPS_PAGES se estableció en N y el analizador procesó al menos una página pero se quedó sin papel antes de procesar todas las N páginas. WIA_STATUS_END_OF_MEDIA
El escáner ha detectado inesperadamente varias fuentes de páginas, ha detenido el examen y ha establecido el WIA_DPS_DOCUMENT_HANDLING_STATUS en MULTIPLE_FEED. WIA_ERROR_MULTI_FEED
El escáner se quedó sin papel en el primer examen, independientemente del valor de la propiedad WIA_DPS_PAGES.
Se produjo un atasco de papel u otro error durante la operación de examen.
Otro código de error

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado wiamindr_lh.h (incluya Wiamindr.h)

Consulte también

IWiaMiniDrv

IWiaMiniDrv::d rvGetDeviceErrorStr

MINIDRV_TRANSFER_CONTEXT

wiasGetImageInformation