次の方法で共有


IWiaMiniDrv::d rvAcquireItemData メソッド (wiamindr_lh.h)

IWiaMiniDrv::d rvAcquireItemData メソッドは、WIA サービスによって呼び出され、デバイスからアプリケーションにデータを転送します。

構文

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を返す場合、格納される値は 0 になります。 それ以外の場合、ミニドライバー固有のエラー コードは、このパラメーターが指す場所に格納されます。

__MIDL__IWiaMiniDrv0012

pmdtc [in, out]

デバイス転送コンテキストを含む MINIDRV_TRANSFER_CONTEXT 構造体を指します。 MINIDRV_TRANSFER_CONTEXT構造体には、転送するデータに関連するパラメーターが含まれています。

戻り値

成功した場合、メソッドは S_OKを返し、 plDevErrVal が指すデバイス エラー値をクリアする必要があります。 転送が取り消された場合、メソッドは S_FALSEを返す必要があります。 メソッドが失敗した場合は、標準の COM エラー コードを返し、 plDevErrVal が指すメモリにミニドライバー固有のエラー コード値を入力する必要があります。 [ 解説] セクションには、ADF スキャンに適用される追加の戻り値情報があります。

注釈

転送には、メモリベースとファイルベースの 2 種類のメインがあります。 WIA サービスは、pmdtc--tymed> の設定によって実行される種類を示します。これは、メモリベースの転送にTYMED_CALLBACKまたはTYMED_MULTIPAGE_CALLBACKされ、ファイル転送のTYMED_FILEまたはTYMED_MULTIPAGE_FILEされます。 これらの定数の詳細については、「 WIA_IPA_TYMED」を参照してください。

  • メモリベースの転送の場合、 pmdtc-->bClassDrvAllocBuf の値で示されているように、バッファーが既に割り当てられている場合と割り当てられていない場合があります。 WIA サービスは、ミニドライバーに最大 2 つのバッファーを渡すことができますが、通常は 1 つだけを渡します。 バッファーの数は、 pmdtc-->lNumBuffers の値によって指定されます。 バッファーのメモリがまだ割り当てられていない場合、ミニドライバーは 、CoTaskMemAllocnew などの通常の方法のいずれかを使用して割り当てる必要があります。 ミニドライバーがバッファーを割り当てる場合は、バッファーを解放する責任もあります。

  • ファイル転送の場合、ミニドライバーはまず、WIA サービスのこのメソッドの呼び出しで渡されたバッファーにデータを書き込み、 wiasWritePageBufToFile を呼び出して、関連するファイルにバッファー データを書き込む必要があります。 ミニドライバーは、 pmdtc-->hFile で指定されたファイル ハンドルを使用してファイルにデータを書き込もうとしないでください。

ミニドライバーは定期的に、転送の状態を更新するために、pdmtc-->pIWiaMiniDrvCallBack によって の COM インターフェイス ポイントで IWiaMiniDrvCallBack::MiniDrvCallback メソッドを呼び出す必要があります。 メモリベースの転送の場合、この関数はデータをアプリケーションに渡すために使用されます。 この関数を呼び出す頻度はミニドライバーに委ねられますが、転送中は約 10 回(1 秒あたり約 1 回)、どちらか頻繁に呼び出す必要があります。

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 に設定され、スキャナーは少なくとも 1 ページを処理しましたが、すべての N ページを処理する前に用紙が不足していました。 WIA_STATUS_END_OF_MEDIA
スキャナーが予期せず複数のページ フィードを検出し、スキャンを停止し、 WIA_DPS_DOCUMENT_HANDLING_STATUS をMULTIPLE_FEEDに設定しました。 WIA_ERROR_MULTI_FEED
WIA_DPS_PAGES プロパティの設定に関係なく、スキャナーは最初のスキャンで用紙切れでした。
スキャン操作中に紙詰まりまたはその他のエラーが発生しました。
その他のエラー コード

要件

要件
対象プラットフォーム デスクトップ
Header wiamindr_lh.h (Wiamindr.h を含む)

こちらもご覧ください

IWiaMiniDrv

IWiaMiniDrv::d rvGetDeviceErrorStr

MINIDRV_TRANSFER_CONTEXT

wiasGetImageInformation