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 status Code für diese Methode erhält. Wenn diese Methode S_OK zurückgibt, ist der gespeicherte Wert null. Andernfalls wird ein minidriverspezifischer Fehlercode an der Stelle gespeichert, auf die dieser Parameter verweist.

__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 plDevErrVal verweist. 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 im Speicher, auf den plDevErrVal verweist, einen minidriver-spezifischen Fehlercodewert eingeben. Der Abschnitt Hinweise enthält zusätzliche Rückgabewertinformationen, die für ADF-Überprüfungen gelten.

Hinweise

Es gibt zwei Standard Arten der Übertragung: speicherbasiert und dateibasiert. Der WIA-Dienst gibt an, welcher Typ von der Einstellung pmdtc-->tymed ausgeführt werden soll, die für speicherbasierte Übertragungen TYMED_CALLBACK oder TYMED_MULTIPAGE_CALLBACK ist, 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 wurde möglicherweise bereits ein Puffer zugeordnet, wie durch den Wert in pmdtc--bClassDrvAllocBuf> angegeben. Der WIA-Dienst kann bis zu zwei Puffer an den Minitreiber übergeben, in der Regel aber nur einen. Die Anzahl der Puffer wird durch den Wert in pmdtc--lNumBuffers> angegeben. Wenn der Arbeitsspeicher für den Puffer noch nicht belegt ist, sollte der Minitreiber ihn mithilfe einer der üblichen Mittel wie CoTaskMemAlloc oder new zuordnen. Wenn der Minitreiber einen Puffer zuordnet, ist er auch dafür verantwortlich, den Puffer frei zu geben.

  • 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 pmdtc--hFile> angegebene Dateihandle zu verwenden, um die Daten in die Datei zu schreiben.

In regelmäßigen Abständen sollte der Minidriver die IWiaMiniDrvCallBack::MiniDrvCallback-Methode in der COM-Schnittstelle aufrufen, auf die von pdmtc--pIWiaMiniDrvCallBack> verweist, um die 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 Minitreiber überlassen, aber sie sollte etwa zehn Mal oder ungefähr einmal pro Sekunde während der Übertragung aufgerufen werden, je nachdem, was häufiger ist.

Weitere Übertragungsparameter, die der WIA-Dienst bereitstellt, sind:

  • pmdtc-->guidFormatID – das Datenformat

  • pmdtc-->lCompression - der verwendete Komprimierungstyp

Ein potenzielles Problem für ADF-fähige Scanner ist, dass während eines Scanvorgangs kein Papier mehr vorhanden ist. 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 Bestimmung des geeigneten HRESULT zu unterstützen, das in dieser Methode zurückgegeben werden soll.

Szenario HRESULT-Wert
Die eigenschaft WIA_DPS_PAGES wurde auf 0 festgelegt, und der Scanner hat seine ADF ohne Fehler geleert.
Die eigenschaft WIA_DPS_PAGES wurde auf N (wobei N > 0) festgelegt wurde, und der Scanner verarbeitete N Seiten ohne Fehler.
S_OK
Die eigenschaft WIA_DPS_PAGES wurde auf N festgelegt, und der Scanner verarbeitete mindestens eine Seite, es war jedoch kein Papier mehr vorhanden, bevor alle N-Seiten verarbeitet wurden. WIA_STATUS_END_OF_MEDIA
Der Scanner hat unerwartet mehrere Seitenfeeds erkannt, das Scannen beendet und die WIA_DPS_DOCUMENT_HANDLING_STATUS auf MULTIPLE_FEED festgelegt. WIA_ERROR_MULTI_FEED
Beim ersten Scan ging das Papier des Scanners aus, unabhängig von der Einstellung der eigenschaft WIA_DPS_PAGES.
Während des Scanvorgangs ist ein Papierstau oder ein anderer Fehler aufgetreten.
Anderer Fehlercode

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile wiamindr_lh.h (wiamindr.h einschließen)

Weitere Informationen

IWiaMiniDrv

IWiaMiniDrv::d rvGetDeviceErrorStr

MINIDRV_TRANSFER_CONTEXT

wiasGetImageInformation