Freigeben über


IWiaMiniDrv::d rvAcquireItemData-Methode (wiamindr_lh.h)

Die IWiaMiniDrv::d rvAcquireItemData--Methode wird vom WIA-Dienst aufgerufen, um Daten vom Gerät in eine Anwendung zu übertragen.

Syntax

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

Parameter

__MIDL__IWiaMiniDrv0009

lFlags [in]

Reserviert.

__MIDL__IWiaMiniDrv0010

pWiasContext- [in]

Zeiger auf einen WIA-Elementkontext.

__MIDL__IWiaMiniDrv0011

plDevErrVal [out]

Verweist auf einen Speicherspeicherort, der einen Statuscode für diese Methode empfängt. Wenn diese Methode S_OKzurückgibt, ist der gespeicherte Wert null. Andernfalls wird ein minidriverspezifischer Fehlercode an der Position gespeichert, auf die durch diesen Parameter verwiesen wird.

__MIDL__IWiaMiniDrv0012

pmdtc [in, out]

Verweist auf eine MINIDRV_TRANSFER_CONTEXT Struktur, die den Geräteübertragungskontext enthält. Die MINIDRV_TRANSFER_CONTEXT-Struktur enthält Parameter, die sich auf die zu übertragenden Daten beziehen.

Rückgabewert

Bei Erfolg sollte die Methode S_OK zurückgeben und den Gerätefehlerwert löschen, auf den plDevErrValverweist. Wenn die Übertragung abgebrochen wurde, sollte die Methode S_FALSE zurückgeben. Wenn die Methode fehlschlägt, sollte sie einen standardmäßigen COM-Fehlercode zurückgeben und einen minidriverspezifischen Fehlercodewert im Speicher ausfüllen, auf den plDevErrValverweist. Der Abschnitt Hinweise enthält zusätzliche Rückgabewertinformationen, die für die ADF-Überprüfung gelten.

Bemerkungen

Es gibt zwei Haupttypen der Übertragung: speicherbasiert und dateibasiert. Der WIA-Dienst gibt an, welcher Typ durch die Einstellung von pmdtcausgeführt werden soll ->tymed, die für speicherbasierte Übertragungen TYMED_CALLBACK oder TYMED_MULTIPAGE_CALLBACK werden, und TYMED_FILE oder TYMED_MULTIPAGE_FILE für Dateiübertragungen. Weitere Informationen zu diesen Konstanten finden Sie unter WIA_IPA_TYMED.

  • Bei speicherbasierten Übertragungen kann ein Puffer bereits zugewiesen worden sein, wie durch den Wert in pmdtcangegeben ->bClassDrvAllocBuf. Der WIA-Dienst kann bis zu zwei Puffer an den Minidriver übergeben, übergibt jedoch in der Regel nur einen. Die Anzahl der Puffer wird durch den Wert in pmdtc-->lNumBuffersangegeben. Wenn der Speicher für den Puffer noch nicht zugeordnet ist, sollte der Minidriver ihn mit einem der üblichen Mittel zuordnen, z. B. CoTaskMemAlloc-oder neuen. Wenn der Minidriver einen Puffer zuweist, hat er auch die Verantwortung, den Puffer freizulösen.

  • Bei Dateiübertragungen sollte der Minidriver zuerst die Daten in den Puffer schreiben, der im Aufruf des WIA-Diensts an diese Methode übergeben wird, und dann wiasWritePageBufToFile- aufrufen, um die Pufferdaten in die betroffene Datei zu schreiben. Der Minidriver sollte nicht versuchen, das in pmdtcangegebene Dateihandle zu verwenden –>hFile-, um die Daten in die Datei zu schreiben.

In regelmäßigen Abständen sollte der Minidriver die IWiaMiniDrvCallBack::MiniDrvCallback Methode in der COM-Schnittstelle durch pdmtcaufrufen ->pIWiaMiniDrvCallBack, um den Status der Übertragung zu aktualisieren. Bei speicherbasierten Übertragungen wird diese Funktion verwendet, um die Daten an die Anwendung zurückzugeben. Wie oft diese Funktion aufgerufen werden soll, bleibt dem Minidriver überlassen, aber es sollte etwa zehn Mal oder ungefähr einmal pro Sekunde während der Übertragung aufgerufen werden, je nachdem, welcher Wert häufiger ist.

Weitere Übertragungsparameter, die der WIA-Dienst bereitstellt, umfassen Folgendes:

  • pmdtc-->guidFormatID- - das Datenformat

  • pmdtc-->lCompression - die Art der verwendeten Komprimierung

Ein potenzielles Problem für ADF-ausgerüstete Scanner läuft während eines Scanvorgangs aus Papier. Das HRESULT, das Ihre Implementierung von IWiaMiniDrv::d rvAcquireItemData zurückgibt, hängt von der aktuellen Einstellung der WIA_DPS_PAGES-Eigenschaft des Scanners und davon ab, ob alle Seiten ordnungsgemäß gescannt wurden. Verwenden Sie die folgenden Regeln, um Sie bei der Ermittlung der geeigneten HRESULT- zur Rückgabe in dieser Methode zu unterstützen.

Szenario HRESULT-Wert
Die WIA_DPS_PAGES-Eigenschaft wurde auf 0 festgelegt, und der Scanner hat seine ADF ohne Fehler geleert.
Die WIA_DPS_PAGES-Eigenschaft wurde auf N (wobei N > 0) festgelegt wurde, und der Scanner verarbeitete N-Seiten ohne Fehler.
S_OK
Die WIA_DPS_PAGES-Eigenschaft wurde auf N festgelegt, und der Scanner hat mindestens eine Seite verarbeitet, aber vor der Verarbeitung aller N-Seiten papierbereit. WIA_STATUS_END_OF_MEDIA
Der Scanner hat unerwartet mehrere Seitenfeed erkannt, das Scannen beendet und die WIA_DPS_DOCUMENT_HANDLING_STATUS auf MULTIPLE_FEED festgelegt. WIA_ERROR_MULTI_FEED
Der Scanner hat beim ersten Scan unabhängig von der Einstellung der WIA_DPS_PAGES-Eigenschaft papieriert.
Während des Scanvorgangs ist ein Papierstau oder ein anderer Fehler aufgetreten.
Anderer Fehlercode

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- wiamindr_lh.h (include Wiamindr.h)

Siehe auch

IWiaMiniDrv-

IWiaMiniDrv::d rvGetDeviceErrorStr

MINIDRV_TRANSFER_CONTEXT

wiasGetImageInformation