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) |