Partager via


IWiaMiniDrv ::d rvAcquireItemData, méthode (wiamindr_lh.h)

La méthode IWiaMiniDrv ::d rvAcquireItemData est appelée par le service WIA pour transférer des données de l’appareil vers une application.

Syntaxe

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

Paramètres

__MIDL__IWiaMiniDrv0009

lFlags [in]

Réservé.

__MIDL__IWiaMiniDrv0010

pWiasContext [in]

Pointeur vers un contexte d’élément WIA.

__MIDL__IWiaMiniDrv0011

plDevErrVal [out]

Pointe vers un emplacement de mémoire qui recevra un code d’état pour cette méthode. Si cette méthode retourne S_OK, la valeur stockée est égale à zéro. Sinon, un code d’erreur spécifique au minidriver est stocké à l’emplacement vers lequel pointe ce paramètre.

__MIDL__IWiaMiniDrv0012

pmdtc [in, out]

Pointe vers une structure MINIDRV_TRANSFER_CONTEXT contenant le contexte de transfert d’appareil. La structure MINIDRV_TRANSFER_CONTEXT contient des paramètres relatifs aux données à transférer.

Valeur de retour

En cas de réussite, la méthode doit retourner S_OK et effacer la valeur d’erreur de l’appareil pointée par plDevErrVal. Si le transfert a été annulé, la méthode doit retourner S_FALSE. Si la méthode échoue, elle doit retourner un code d’erreur COM standard et remplir une valeur de code d’erreur spécifique au minidriver dans la mémoire vers laquelle pointe plDevErrVal. La section Remarques contient des informations de retour supplémentaires qui s’appliquent à l’analyse ADF.

Remarques

Il existe deux types principaux de transfert : basé sur la mémoire et basé sur des fichiers. Le service WIA indique quel type doit être effectué par le paramètre de pmdtc-->tymed , qui sera TYMED_CALLBACK ou TYMED_MULTIPAGE_CALLBACK pour les transferts en mémoire, et TYMED_FILE ou TYMED_MULTIPAGE_FILE pour les transferts de fichiers. Pour plus d’informations sur ces constantes, consultez WIA_IPA_TYMED.

  • Pour les transferts basés sur la mémoire, une mémoire tampon peut ou non avoir déjà été allouée, comme indiqué par la valeur dans pmdtc-->bClassDrvAllocBuf. Le service WIA peut transmettre jusqu’à deux mémoires tampons au minidriver, mais ne passe généralement qu’une seule mémoire tampon. Le nombre de mémoires tampons est spécifié par la valeur dans pmdtc-->lNumBuffers. Si la mémoire de la mémoire tampon n’est pas déjà allouée, le minidriver doit l’allouer à l’aide de l’un des moyens habituels, tels que CoTaskMemAlloc, ou nouvelle. Si le minidriver alloue une mémoire tampon, il a également la responsabilité de libérer la mémoire tampon.

  • Pour les transferts de fichiers, le minidriver doit d’abord écrire les données dans la mémoire tampon passée dans l’appel du service WIA à cette méthode, puis appeler wiasWritePageBufToFile pour écrire les données de mémoire tampon dans le fichier impliqué. Le minidriver ne doit pas tenter d’utiliser le handle de fichier spécifié dans pmdtc -->hFile pour écrire les données dans le fichier.

Régulièrement, le minidriver doit appeler la méthode IWiaMiniDrvCallBack ::MiniDrvCallback dans l’interface COM pointant vers pdmtc-->pIWiaMiniDrvCallBack pour mettre à jour l’état du transfert. Pour les transferts basés sur la mémoire, cette fonction est utilisée pour renvoyer les données à l’application. La fréquence à laquelle cette fonction doit être appelée est laissée au minidriver, mais elle doit être appelée environ dix fois, ou approximativement une fois par seconde pendant le transfert, selon ce qui est plus souvent.

Les autres paramètres de transfert que le service WIA fournit sont les suivants :

  • pmdtc-->guidFormatID - format de données

  • pmdtc-->lCompression - type de compression utilisé

Un problème potentiel pour les scanneurs équipés d’ADF manque de papier pendant une opération d’analyse. HRESULT que votre implémentation de IWiaMiniDrv ::d rvAcquireItemData retourne dépend du paramètre actuel de la propriété WIA_DPS_PAGES du scanneur, et si toutes les pages ont été correctement analysées. Utilisez les règles suivantes pour vous guider dans la détermination des HRESULT appropriées à retourner dans cette méthode.

Scénario Valeur HRESULT
La propriété WIA_DPS_PAGES a été définie sur 0, et le scanneur a vidé sa fonction ADF sans erreur.
La propriété WIA_DPS_PAGES a été définie sur N (où N > 0) et le scanneur a traité N pages sans erreur.
S_OK
La propriété WIA_DPS_PAGES a été définie sur N, et le scanneur a traité au moins une page, mais a dépassé le papier avant de traiter toutes les pages N. WIA_STATUS_END_OF_MEDIA
Le scanneur a détecté de manière inattendue plusieurs flux de pages, arrêté l’analyse et a défini la WIA_DPS_DOCUMENT_HANDLING_STATUS sur MULTIPLE_FEED. WIA_ERROR_MULTI_FEED
Le scanneur a dépassé le papier lors de la première analyse, quel que soit le paramètre de la propriété WIA_DPS_PAGES.
Une confiture de papier ou une autre erreur s’est produite pendant l’opération d’analyse.
Autre code d’erreur

Exigences

Exigence Valeur
plateforme cible Bureau
d’en-tête wiamindr_lh.h (include Wiamindr.h)

Voir aussi

IWiaMiniDrv

IWiaMiniDrv ::d rvGetDeviceErrorStr

MINIDRV_TRANSFER_CONTEXT

wiasGetImageInformation