Condividi tramite


Applicare le impostazioni delle proprietà WIA all'hardware

Quando un'applicazione WIA avvia un trasferimento dati, il servizio WIA offre al minidriver WIA l'opportunità di applicare le impostazioni correnti delle proprietà WIA e di applicare le impostazioni specifiche del dispositivo all'hardware. Il servizio WIA chiama quindi il metodo IWiaMiniDrv::d rvWriteItemProperties prima di chiamare il metodo IWiaMiniDrv::d rvAcquireItemData . Quest'ultimo metodo viene chiamato solo quando un'applicazione WIA avvia un trasferimento dati. Il minidriver WIA deve usare le funzioni del servizio WIA per leggere le proprietà nell'albero degli elementi del driver.

Implementare IWiaMiniDrv::d rvWriteItemProperties

Il servizio WIA chiama il metodo IWiaMiniDrv::d rvWriteItemProperties dopo che il client richiede un trasferimento dati. Il servizio WIA chiama questo metodo prima di effettuare una chiamata a IWiaMiniDrv::d rvAcquireItemData. Il minidriver WIA deve eseguire il commit di tutte le impostazioni necessarie all'hardware prima di restituire da questo metodo.

Quando viene chiamato questo metodo, il minidriver WIA è stato eseguito il commit per eseguire un trasferimento dati. Il servizio WIA avrà esito negativo in qualsiasi applicazione che tenta di acquisire dati in questo momento con un codice di errore WIA_ERROR_BUSY.

Nell'esempio seguente viene illustrata un'implementazione del metodo IWiaMiniDrv::d rvWriteItemProperties :

HRESULT _stdcall CWIADevice::drvWriteItemProperties(
  BYTE                      *pWiasContext,
  LONG                      lFlags,
  PMINIDRV_TRANSFER_CONTEXT pmdtc,
  LONG                      *plDevErrVal)
{
  //
  // If the caller did not pass in the correct parameters,
  // then fail the call with E_INVALIDARG.
  //

  if (!pWiasContext) {
      return E_INVALIDARG;
  }

 if (!pmdtc) {
      return E_INVALIDARG;
  }

  if (!plDevErrVal) {
      return E_INVALIDARG;
  }

  HRESULT hr = S_OK;
  *plDevErrVal = 0;
  PROPVARIANT pv[2];
  PROPSPEC ps[2] = {
      {PRSPEC_PROPID, WIA_IPS_XRES},
      {PRSPEC_PROPID, WIA_IPS_YRES}
  };

  //
  // initialize propvariant structures
  //

  pv[0].vt = VT_I4;   // X resolution is a LONG value
  pv[1].vt = VT_I4;   // Y resolution is a LONG value

  //
  // read 2 WIA item properties (X and Y resolution)
  //

  hr = wiasReadMultiple(pWiasContext, 2, ps, pv, NULL);

  if (hr == S_OK) {

    //
    // write current X and Y resolution values, read from the
    // the WIA property set, and write them to the device.
    //

      hr = SetMyDeviceXResolution(pv[0].lVal);
      if(S_OK == hr) {
          hr = SetMyDeviceYResolution(pv[1].lVal);
          if(FAILED(hr)) {

            //
            // could not set Y resolution to device
            //

          }
   } else {

        //
        // could not set X resolution to device
        //

      }
  }
  return hr;
}