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 所指向的記憶體中填入迷你驅動程式特定的錯誤碼值,。
言論
傳輸有兩種主要類型:記憶體型和檔案型。 WIA 服務會指出要透過 pmdtc 設定來執行哪一種類型-->tymed,這會 TYMED_CALLBACK 或 TYMED_MULTIPAGE_CALLBACK 記憶體型傳輸,以及 TYMED_FILE 或 TYMED_MULTIPAGE_FILE 進行檔傳輸。 如需這些常數的詳細資訊,請參閱 WIA_IPA_TYMED。
針對記憶體型傳輸,緩衝區可能或可能尚未配置,如 pmdtc 中的值所指示-->bClassDrvAllocBuf。 WIA 服務最多可以將兩個緩衝區傳遞至迷你驅動程式,但通常只會傳遞一個緩衝區。 緩衝區數目是由 pmdtc 中的值所指定,>lNumBuffers。 如果尚未配置緩衝區的記憶體,minidriver 應該使用任何一般方式來配置它,例如 CoTaskMemAlloc,或 新的。 如果 minidriver 配置緩衝區,它也會負責釋放緩衝區。
針對文件傳輸,minidriver 應該先將數據寫入 WIA 服務呼叫此方法時傳遞的緩衝區,然後呼叫 wiasWritePageBufToFile,以將緩衝區數據寫入所涉及的檔案。 minidriver 不應該嘗試使用 pmdtc 中指定的檔句柄 -->hFile 將數據寫入檔案。
minidriver 應該定期呼叫 COM 介面點中的 IWiaMiniDrvCallBack::MiniDrvCallback 方法,方法是 pdmtc-->pIWiaMiniDrvCallBack 更新傳輸的狀態。 針對記憶體型傳輸,此函式會用來將數據傳回應用程式。 應該呼叫此函式的頻率會留給迷你驅動程式,但應該在傳輸期間呼叫大約十次,或大約每秒呼叫一次,但會更常呼叫。
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屬性的設定為何,掃描器在第一次掃描時都用完了紙張。 掃描作業期間發生紙張堵塞或其他錯誤。 |
其他錯誤碼 |
要求
要求 | 價值 |
---|---|
目標平臺 | 桌面 |
標頭 | wiamindr_lh.h (包括 Wiamindr.h) |