Condividi tramite


Metodo IWiaMiniDrv::d rvAcquireItemData (wiamindr_lh.h)

Il metodo IWiaMiniDrv::d rvAcquireItemData viene chiamato dal servizio WIA per trasferire i dati dal dispositivo a un'applicazione.

Sintassi

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

Parametri

__MIDL__IWiaMiniDrv0009

lFlags [in]

Riservato.

__MIDL__IWiaMiniDrv0010

pWiasContext [in]

Puntatore a un contesto di elemento WIA.

__MIDL__IWiaMiniDrv0011

plDevErrVal [out]

Punta a un percorso di memoria che riceverà un codice di stato per questo metodo. Se questo metodo restituisce S_OK, il valore archiviato sarà zero. In caso contrario, un codice di errore specifico del minidriver verrà archiviato nella posizione a cui punta questo parametro.

__MIDL__IWiaMiniDrv0012

pmdtc [in, out]

Punta a una struttura MINIDRV_TRANSFER_CONTEXT contenente il contesto di trasferimento del dispositivo. La struttura MINIDRV_TRANSFER_CONTEXT contiene parametri relativi ai dati da trasferire.

Valore restituito

In caso di esito positivo, il metodo deve restituire S_OK e cancellare il valore di errore del dispositivo a cui punta plDevErrVal. Se il trasferimento è stato annullato, il metodo deve restituire S_FALSE. Se il metodo ha esito negativo, deve restituire un codice di errore COM standard e compilare un valore di codice di errore specifico del minidriver nella memoria a cui punta plDevErrVal. La sezione osservazioni contiene informazioni aggiuntive sul valore restituito applicabili all'analisi di Azure Data Factory.

Osservazioni

Esistono due tipi principali di trasferimento: basato sulla memoria e basato su file. Il servizio WIA indica quale tipo deve essere eseguito dall'impostazione di pmdtc->tymed , che verrà TYMED_CALLBACK o TYMED_MULTIPAGE_CALLBACK per i trasferimenti basati sulla memoria e TYMED_FILE o TYMED_MULTIPAGE_FILE per i trasferimenti di file. Per altre informazioni su queste costanti, vedere WIA_IPA_TYMED.

  • Per i trasferimenti basati sulla memoria, è possibile che un buffer sia già stato allocato, come indicato dal valore in pmdtc->bClassDrvAllocBuf. Il servizio WIA può passare fino a due buffer al minidriver, ma in genere passa solo uno. Il numero di buffer viene specificato dal valore in pmdtc->lNumBuffers. Se la memoria per il buffer non è già allocata, il minidriver deve allocarlo usando uno dei normali mezzi, ad esempio CoTaskMemAlloco nuovo. Se il minidriver alloca un buffer, ha anche la responsabilità di liberare il buffer.

  • Per i trasferimenti di file, il minidriver deve prima scrivere i dati nel buffer passato nella chiamata del servizio WIA a questo metodo e quindi chiamare wiasWritePageBufToFile per scrivere i dati del buffer nel file interessato. Il minidriver non deve tentare di usare l'handle di file specificato in pmdtc->hFile per scrivere i dati nel file.

Periodicamente, il minidriver deve chiamare il metodo IWiaMiniDrvCallBack::MiniDrvCallback nel punto di interfaccia COM da pdmtc->pIWiaMiniDrvCallBack per aggiornare lo stato del trasferimento. Per i trasferimenti basati sulla memoria, questa funzione viene usata per passare nuovamente i dati all'applicazione. La frequenza con cui questa funzione deve essere chiamata viene lasciata al minidriver, ma deve essere chiamata circa dieci volte o approssimativamente una volta al secondo durante il trasferimento, a seconda di quale sia più spesso.

Altri parametri di trasferimento forniti dal servizio WiA includono quanto segue:

  • pmdtc->guidFormatID - formato dati

  • pmdtc ->lCompression - tipo di compressione usato

Un potenziale problema per gli scanner dotati di ADF sta esaurendo la carta durante un'operazione di analisi. Il valore HRESULT restituito dall'implementazione di IWiaMiniDrv::d rvAcquireItemData dipende dall'impostazione corrente della proprietà WIA_DPS_PAGES dello scanner e dal fatto che tutte le pagine siano state analizzate correttamente. Usare le regole seguenti per determinare il HRESULT appropriato da restituire in questo metodo.

Scenario Valore HRESULT
La proprietà WIA_DPS_PAGES è stata impostata su 0 e lo scanner ha svuotato il file ADF senza errori.
La proprietà WIA_DPS_PAGES è stata impostata su N (dove N > 0) e lo scanner ha elaborato N pagine senza errori.
S_OK
La proprietà WIA_DPS_PAGES è stata impostata su N e lo scanner ha elaborato almeno una pagina ma ha esaurito la carta prima di elaborare tutte le pagine N. WIA_STATUS_END_OF_MEDIA
Lo scanner ha rilevato in modo imprevisto più feed di pagine, ha interrotto l'analisi e ha impostato il WIA_DPS_DOCUMENT_HANDLING_STATUS su MULTIPLE_FEED. WIA_ERROR_MULTI_FEED
Lo scanner ha esaurito la carta durante la prima analisi, indipendentemente dall'impostazione della proprietà WIA_DPS_PAGES.
Si è verificato un errore di inceppatura di carta o di altro tipo durante l'operazione di analisi.
Altro codice di errore

Fabbisogno

Requisito Valore
piattaforma di destinazione Desktop
intestazione wiamindr_lh.h (include Wiamindr.h)

Vedere anche

IWiaMiniDrv

IWiaMiniDrv::d rvGetDeviceErrorStr

MINIDRV_TRANSFER_CONTEXT

wiasGetImageInformation