IWiaMiniDrv::d rvAcquireItemData 方法 (wiamindr_lh.h)
WIA 服務會呼叫 IWiaMiniDrv::d rvAcquireItemData 方法,以將數據從裝置傳輸到應用程式。
語法
HRESULT drvAcquireItemData(
BYTE *__MIDL__IWiaMiniDrv0009,
LONG __MIDL__IWiaMiniDrv0010,
PMINIDRV_TRANSFER_CONTEXT __MIDL__IWiaMiniDrv0011,
LONG *__MIDL__IWiaMiniDrv0012
);
參數
__MIDL__IWiaMiniDrv0009
lFlags [in]
保留的。
__MIDL__IWiaMiniDrv0010
pWiasContext [in]
WIA 專案內容的指標。
__MIDL__IWiaMiniDrv0011
plDevErrVal [out]
指向將接收此方法狀態代碼的記憶體位置。 如果這個方法傳回 S_OK,則儲存的值會是零。 否則,minidriver 特定的錯誤碼會儲存在此參數所指向的位置。
__MIDL__IWiaMiniDrv0012
pmdtc [in, out]
指向包含裝置傳輸內容的 MINIDRV_TRANSFER_CONTEXT 結構。 MINIDRV_TRANSFER_CONTEXT 結構包含與要傳輸之數據相關的參數。
傳回值
成功時,方法應該會傳回S_OK,並清除 plDevErrVal 所指向的裝置錯誤值。 如果已取消傳輸,方法應該會傳回S_FALSE。 如果方法失敗,它應該會傳回標準 COM 錯誤碼,並在 plDevErrVal 所指向的記憶體中填入迷你驅動程式特定的錯誤碼值。 「備註」區段有適用於ADF掃描的其他傳回值資訊。
備註
傳輸有兩種主要類型:記憶體型和檔案型。 WIA 服務會指出要透過 pmdtc-->tymed 的設定來執行哪一種類型,這會TYMED_CALLBACK或TYMED_MULTIPAGE_CALLBACK用於記憶體型傳輸,以及檔案傳輸TYMED_FILE或TYMED_MULTIPAGE_FILE。 如需這些常數的詳細資訊,請參閱 WIA_IPA_TYMED。
針對以記憶體為基礎的傳輸,緩衝區可能或可能尚未配置,如 pmdtc-->bClassDrvAllocBuf 中的值所表示。 WIA 服務最多可以將兩個緩衝區傳遞至迷你驅動程式,但通常只會傳遞一個緩衝區。 緩衝區數目是由 pmdtc-->lNumBuffers 中的值所指定。 如果尚未配置緩衝區的記憶體,迷你驅動程序應該使用任何一般方式來配置它,例如 CoTaskMemAlloc 或 new。 如果 minidriver 配置緩衝區,它也會負責釋放緩衝區。
對於檔案傳輸,minidriver 應該先將數據寫入 WIA 服務呼叫中傳遞至此方法的緩衝區,然後呼叫 wiasWritePageBufToFile ,將緩衝區數據寫入涉及的檔案。 minidriver 不應該嘗試使用 pmdtc-->hFile 中指定的檔案句柄,將數據寫入檔案。
Minidriver 應該定期呼叫 COM 介面點中的 IWiaMiniDrvCallBack::MiniDrvCallback 方法,由 pdmtc-->pIWiaMiniDrvCallBack 更新傳輸的狀態。 針對以記憶體為基礎的傳輸,此函式是用來將數據傳回應用程式。 應該呼叫此函式的頻率會保留至迷你驅動程式,但應該在傳輸期間呼叫大約 10 次,或大約每秒呼叫一次,無論頻率為何。
WIA 服務提供的其他傳輸參數包括:
pmdtc-->guidFormatID - 數據格式
pmdtc-->lCompression - 使用的壓縮類型
在掃描作業期間,ADF 型掃描器的潛在問題已用完紙張。 您實作 IWiaMiniDrv::d rvAcquireItemData 傳回的 HRESULT 取決於掃描器WIA_DPS_PAGES屬性的目前設定,以及是否已正確掃描所有頁面。 使用下列規則可引導您判斷要在此方法中傳回的適當 HRESULT 。
案例 | HRESULT 值 |
---|---|
WIA_DPS_PAGES 屬性已設定為 0,且掃描器已清空其 ADF 且沒有錯誤。 WIA_DPS_PAGES 屬性已設定為 N (,其中 N 0) ,且掃描器處理 N > 個頁面沒有錯誤。 |
S_OK |
WIA_DPS_PAGES 屬性已設定為 N,掃描器至少處理了一頁,但在處理所有 N 頁之前已用完紙張。 | WIA_STATUS_END_OF_MEDIA |
掃描器意外偵測到多個頁面摘要、停止掃描,並將WIA_DPS_DOCUMENT_HANDLING_STATUS設定為 MULTIPLE_FEED 。 | WIA_ERROR_MULTI_FEED |
掃描器在第一次掃描時用完紙張,不論WIA_DPS_PAGES屬性的設定為何。 掃描作業期間發生紙張 Jam 或其他錯誤。 |
其他錯誤碼 |
規格需求
需求 | 值 |
---|---|
目標平台 | 桌面 |
標頭 | wiamindr_lh.h (包括 Wiamindr.h) |