Partager via


Méthode IWiaMiniDrv ::d rvAcquireItemData (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 status pour cette méthode. Si cette méthode retourne S_OK, la valeur stockée est égale à zéro. Dans le cas contraire, un code d’erreur spécifique au minidriver sera stocké à l’emplacement indiqué par 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 qui se rapportent aux données à transférer.

Valeur retournée

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 renseigner une valeur de code d’erreur spécifique au minidriver dans la mémoire pointée par plDevErrVal. La section Remarques contient des informations supplémentaires sur la valeur de retour qui s’appliquent à l’analyse ADF.

Remarques

Il existe deux types main de transfert : basé sur la mémoire et sur fichier. Le service WIA indique quel type doit être effectué par le paramètre pmdtc-->tymed, qui sera TYMED_CALLBACK ou TYMED_MULTIPAGE_CALLBACK pour les transferts basés sur la 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 avoir ou non 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 n’en transmet généralement qu’une seule. Le nombre de mémoires tampons est spécifié par la valeur dans pmdtc-->lNumBuffers. Si 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 nouveau. 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 par pdmtc-->pIWiaMiniDrvCallBack pour mettre à jour la status 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 environ une fois par seconde pendant le transfert, selon la fréquence la plus fréquente.

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 est le manque de papier pendant une opération de numérisation. Le RÉSULTAT HRESULT que votre implémentation d’IWiaMiniDrv ::d rvAcquireItemData retourne dépend du paramètre actuel de la propriété WIA_DPS_PAGES du scanneur et de la façon dont toutes les pages ont été correctement analysées. Utilisez les règles suivantes pour vous guider dans la détermination du HRESULT approprié à 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é son 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 manqué de papier avant de traiter toutes les N pages. WIA_STATUS_END_OF_MEDIA
Le scanneur a détecté de manière inattendue plusieurs flux de pages, a arrêté l’analyse et a défini le WIA_DPS_DOCUMENT_HANDLING_STATUS sur MULTIPLE_FEED. WIA_ERROR_MULTI_FEED
Le scanneur a manqué de papier lors de la première analyse, quel que soit le paramètre de la propriété WIA_DPS_PAGES.
Un blocage de papier ou une autre erreur s’est produit pendant l’opération d’analyse.
Autre code d’erreur

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête wiamindr_lh.h (inclure Wiamindr.h)

Voir aussi

IWiaMiniDrv

IWiaMiniDrv ::d rvGetDeviceErrorStr

MINIDRV_TRANSFER_CONTEXT

wiasGetImageInformation