Método IWiaMiniDrv::d rvAcquireItemData (wiamindr_lh.h)
O método IWiaMiniDrv::d rvAcquireItemData é chamado pelo serviço WIA para transferir dados do dispositivo para um aplicativo.
Sintaxe
HRESULT drvAcquireItemData(
BYTE *__MIDL__IWiaMiniDrv0009,
LONG __MIDL__IWiaMiniDrv0010,
PMINIDRV_TRANSFER_CONTEXT __MIDL__IWiaMiniDrv0011,
LONG *__MIDL__IWiaMiniDrv0012
);
Parâmetros
__MIDL__IWiaMiniDrv0009
lFlags [in]
Reservado.
__MIDL__IWiaMiniDrv0010
pWiasContext [in]
Ponteiro para um contexto de item WIA.
__MIDL__IWiaMiniDrv0011
plDevErrVal [out]
Aponta para um local de memória que receberá um código status para esse método. Se esse método retornar S_OK, o valor armazenado será zero. Caso contrário, um código de erro específico do minidriver será armazenado no local apontado por esse parâmetro.
__MIDL__IWiaMiniDrv0012
pmdtc [in, out]
Aponta para uma estrutura de MINIDRV_TRANSFER_CONTEXT que contém o contexto de transferência do dispositivo. A estrutura MINIDRV_TRANSFER_CONTEXT contém parâmetros que pertencem aos dados a serem transferidos.
Retornar valor
Com êxito, o método deve retornar S_OK e limpar o valor de erro do dispositivo apontado por plDevErrVal. Se a transferência tiver sido cancelada, o método deverá retornar S_FALSE. Se o método falhar, ele deverá retornar um código de erro COM padrão e preencher um valor de código de erro específico do minidriver na memória apontada por plDevErrVal. A seção Comentários tem informações adicionais de valor retornado que se aplicam à verificação do ADF.
Comentários
Há dois tipos main de transferência: baseado em memória e baseado em arquivo. O serviço WIA indica qual tipo deve ser executado pela configuração de pmdtc-->tymed, que será TYMED_CALLBACK ou TYMED_MULTIPAGE_CALLBACK para transferências baseadas em memória e TYMED_FILE ou TYMED_MULTIPAGE_FILE para transferências de arquivo. Para obter mais informações sobre essas constantes, consulte WIA_IPA_TYMED.
Para transferências baseadas em memória, um buffer pode ou não ter sido alocado, conforme indicado pelo valor em pmdtc-->bClassDrvAllocBuf. O serviço WIA pode passar até dois buffers para o minidriver, mas normalmente passa apenas um. O número de buffers é especificado pelo valor em pmdtc-->lNumBuffers. Se a memória do buffer ainda não estiver alocada, o minidriver deverá alocá-lo usando qualquer um dos meios usuais, como CoTaskMemAlloc ou novo. Se o minidriver alocar um buffer, ele também terá a responsabilidade de liberar o buffer.
Para transferências de arquivo, o minidriver deve primeiro gravar os dados no buffer passado na chamada do serviço WIA para esse método e, em seguida, chamar wiasWritePageBufToFile para gravar os dados do buffer no arquivo envolvido. O minidriver não deve tentar usar o identificador de arquivo especificado em pmdtc-->hFile para gravar os dados no arquivo.
Periodicamente, o minidriver deve chamar o método IWiaMiniDrvCallBack::MiniDrvCallback no ponto de interface COM por pdmtc-->pIWiaMiniDrvCallBack para atualizar o status da transferência. Para transferências baseadas em memória, essa função é usada para passar os dados de volta para o aplicativo. A frequência com que essa função deve ser chamada é deixada para o minidriver, mas ela deve ser chamada cerca de dez vezes ou aproximadamente uma vez por segundo durante a transferência, o que for mais frequentemente.
Outros parâmetros de transferência que o serviço WIA fornece incluem o seguinte:
pmdtc-->guidFormatID - o formato de dados
pmdtc-->lCompression - o tipo de compactação usada
Um problema potencial para scanners equipados com ADF está ficando sem papel durante uma operação de verificação. O HRESULT que sua implementação de IWiaMiniDrv::d rvAcquireItemData retorna depende da configuração atual da propriedade WIA_DPS_PAGES do verificador e se todas as páginas foram verificadas corretamente. Use as regras a seguir para orientá-lo a determinar o HRESULT apropriado para retornar nesse método.
Cenário | Valor HRESULT |
---|---|
A propriedade WIA_DPS_PAGES foi definida como 0 e o verificador esvaziou seu ADF sem erros. A propriedade WIA_DPS_PAGES foi definida como N (onde N > 0) e o verificador processou N páginas sem erros. |
S_OK |
A propriedade WIA_DPS_PAGES foi definida como N e o verificador processou pelo menos uma página, mas ficou sem papel antes de processar todas as N páginas. | WIA_STATUS_END_OF_MEDIA |
O verificador detectou inesperadamente vários feeds de página, interrompeu a verificação e definiu o WIA_DPS_DOCUMENT_HANDLING_STATUS como MULTIPLE_FEED. | WIA_ERROR_MULTI_FEED |
O scanner ficou sem papel na primeira verificação, independentemente da configuração da propriedade WIA_DPS_PAGES. Ocorreu um congestionamento de papel ou outro erro durante a operação de verificação. |
Outro código de erro |
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Área de Trabalho |
Cabeçalho | wiamindr_lh.h (inclua Wiamindr.h) |