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 una posizione 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 che si applicano all'analisi di ADF.

Commenti

Esistono due tipi principali di trasferimento: basati sulla memoria e basati 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 ne 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 mezzi consueti, ad esempio CoTaskMemAlloc o 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 scansione. 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 valore HRESULT appropriato da restituire in questo metodo.

Scenario Valore HRESULT
La proprietà WIA_DPS_PAGES è stata impostata su 0 e lo scanner ha svuotato l'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 N pagine. 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 nella prima scansione, indipendentemente dall'impostazione della proprietà WIA_DPS_PAGES.
Si è verificato un errore di inceppatura o di altro tipo durante l'operazione di analisi.
Altro codice di errore

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione wiamindr_lh.h (include Wiamindr.h)

Vedi anche

IWiaMiniDrv

IWiaMiniDrv::d rvGetDeviceErrorStr

MINIDRV_TRANSFER_CONTEXT

wiasGetImageInformation