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