Metode IWiaMiniDrv::d rvAcquireItemData (wiamindr_lh.h)

Metode IWiaMiniDrv::d rvAcquireItemData dipanggil oleh layanan WIA untuk mentransfer data dari perangkat ke aplikasi.

Sintaks

HRESULT drvAcquireItemData(
  BYTE                      *__MIDL__IWiaMiniDrv0009,
  LONG                      __MIDL__IWiaMiniDrv0010,
  PMINIDRV_TRANSFER_CONTEXT __MIDL__IWiaMiniDrv0011,
  LONG                      *__MIDL__IWiaMiniDrv0012
);

Parameter

__MIDL__IWiaMiniDrv0009

lFlags [in]

Dicadangkan.

__MIDL__IWiaMiniDrv0010

pWiasContext [in]

Arahkan ke konteks item WIA.

__MIDL__IWiaMiniDrv0011

plDevErrVal [out]

Menunjuk ke lokasi memori yang akan menerima kode status untuk metode ini. Jika metode ini mengembalikan S_OK, nilai yang disimpan akan menjadi nol. Jika tidak, kode kesalahan khusus minidriver akan disimpan di lokasi yang ditujukan oleh parameter ini.

__MIDL__IWiaMiniDrv0012

pmdtc [in, out]

Menunjuk ke struktur MINIDRV_TRANSFER_CONTEXT yang berisi konteks transfer perangkat. Struktur MINIDRV_TRANSFER_CONTEXT berisi parameter yang berkaitan dengan data yang akan ditransfer.

Mengembalikan nilai

Jika berhasil, metode harus mengembalikan S_OK dan menghapus nilai kesalahan perangkat yang ditunjukkan oleh plDevErrVal. Jika transfer dibatalkan, metode harus mengembalikan S_FALSE. Jika metode gagal, metode harus mengembalikan kode kesalahan COM standar dan mengisi nilai kode kesalahan khusus minidriver dalam memori yang ditunjukkan oleh plDevErrVal. Bagian Keterangan memiliki informasi nilai pengembalian tambahan yang berlaku untuk pemindaian ADF.

Keterangan

Ada dua jenis transfer utama: berbasis memori, dan berbasis file. Layanan WIA menunjukkan jenis mana yang akan dilakukan dengan pengaturan pmdtc-->tymed, yang akan TYMED_CALLBACK atau TYMED_MULTIPAGE_CALLBACK untuk transfer berbasis memori, dan TYMED_FILE atau TYMED_MULTIPAGE_FILE untuk transfer file. Untuk informasi selengkapnya tentang konstanta ini, lihat WIA_IPA_TYMED.

  • Untuk transfer berbasis memori, buffer mungkin atau mungkin belum dialokasikan, seperti yang ditunjukkan oleh nilai dalam pmdtc-->bClassDrvAllocBuf. Layanan WIA dapat meneruskan hingga dua buffer ke minidriver, tetapi biasanya hanya melewati satu. Jumlah buffer ditentukan oleh nilai dalam pmdtc-->lNumBuffers. Jika memori untuk buffer belum dialokasikan, minidriver harus mengalokasikannya menggunakan salah satu cara biasa, seperti CoTaskMemAlloc, atau yang baru. Jika minidriver mengalokasikan buffer, ia juga memiliki tanggung jawab untuk membebaskan buffer.

  • Untuk transfer file, minidriver harus terlebih dahulu menulis data ke buffer yang diteruskan dalam panggilan layanan WIA ke metode ini, dan kemudian memanggil wiasWritePageBufToFile untuk menulis data buffer ke file yang terlibat. Minidriver tidak boleh mencoba menggunakan handel file yang ditentukan dalam pmdtc-->hFile untuk menulis data ke file.

Secara berkala, minidriver harus memanggil metode IWiaMiniDrvCallBack::MiniDrvCallback di titik antarmuka COM ke oleh pdmtc-->pIWiaMiniDrvCallBack untuk memperbarui status transfer. Untuk transfer berbasis memori, fungsi ini digunakan untuk meneruskan data kembali ke aplikasi. Seberapa sering fungsi ini harus dipanggil dibiarkan ke minidriver, tetapi harus dipanggil sekitar sepuluh kali, atau kira-kira sekali per detik selama transfer, mana yang lebih sering.

Parameter transfer lain yang disediakan layanan WIA meliputi yang berikut ini:

  • pmdtc-->guidFormatID - format data

  • pmdtc-->lCompression - jenis pemadatan yang digunakan

Potensi masalah untuk pemindai yang dilengkapi ADF kehabisan kertas selama operasi pemindaian. HRESULT yang dikembalikan oleh implementasi IWiaMiniDrv::d rvAcquireItemData bergantung pada pengaturan properti WIA_DPS_PAGES pemindai saat ini, dan apakah semua halaman dipindai dengan benar. Gunakan aturan berikut untuk memandu Anda dalam menentukan HRESULT yang sesuai untuk kembali dalam metode ini.

Skenario Nilai HRESULT
Properti WIA_DPS_PAGES diatur ke 0, dan pemindai mengkosongkan ADF-nya tanpa kesalahan.
Properti WIA_DPS_PAGES diatur ke N (di mana N > 0), dan pemindai memproses halaman N tanpa kesalahan.
S_OK
Properti WIA_DPS_PAGES diatur ke N, dan pemindai memproses setidaknya satu halaman tetapi kehabisan kertas sebelum memproses semua halaman N. WIA_STATUS_END_OF_MEDIA
Pemindai secara tak terduga mendeteksi beberapa umpan halaman, menghentikan pemindaian, dan telah mengatur WIA_DPS_DOCUMENT_HANDLING_STATUS ke MULTIPLE_FEED. WIA_ERROR_MULTI_FEED
Pemindai kehabisan kertas pada pemindaian pertama, terlepas dari pengaturan properti WIA_DPS_PAGES.
Terjadi kemacetan kertas atau kesalahan lainnya selama operasi pemindaian.
Kode kesalahan lainnya

Persyaratan

Persyaratan Nilai
Target Platform Desktop
Header wiamindr_lh.h (termasuk Wiamindr.h)

Lihat juga

IWiaMiniDrv

IWiaMiniDrv::d rvGetDeviceErrorStr

MINIDRV_TRANSFER_CONTEXT

wiasGetImageInformation