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