Partilhar via


Compatibilidade WIA-TWAIN

Se um dispositivo pode ter dois ou mais drivers, teste esses drivers minuciosamente para compatibilidade entre si. Por exemplo, se um driver deixar o dispositivo em um estado inutilizável (como o driver não enviar a mensagem de fechar sessão em algum protocolo), o outro driver pode falhar quando ele tenta se comunicar com o dispositivo. Esta situação acontece com frequência com dispositivos seriais.

WIA e TWAIN na mesma DLL

Se você estiver executando um driver WIA e um driver TWAIN ao mesmo tempo a partir de uma única DLL, o serviço WIA e o aplicativo TWAIN carregarão uma instância dessa DLL. A instância WIA da DLL criará a árvore de itens WIA. Esta árvore representa as pastas e imagens da sua câmara. Qualquer aplicativo que use WIA (como Meu Computador ou Assistente de Scanner e Câmera) terá uma cópia da árvore de itens em seu driver.

Quando uma imagem é excluída ou adicionada por meio do driver TWAIN, o driver WIA não é notificado dessa alteração. Como resultado, a árvore de itens WIA conterá imagens que foram excluídas ou não conterá imagens que foram adicionadas. Em ambos os casos, o driver deve atualizar sua árvore de itens. Para fazer isso, o driver TWAIN deve solicitar que o driver WIA atualize sua árvore de itens quando uma imagem for adicionada ou excluída.

Uma maneira de fazer isso é chamar CoCreateInstance(CLSID_IWiaDevMgr,...) do seu driver TWAIN, enumerar todos os dispositivos e procurar seu dispositivo. Uma maneira de identificar seu driver por meio dessa enumeração é criar uma propriedade personalizada em seu driver WIA para que, se o driver TWAIN consultar essa propriedade e ela existir, você saberá que é seu driver WIA. Depois de ter o IWiaItem para o seu driver, envie um comando para o seu driver para reconstruir a sua árvore (por exemplo, envie-lhe um comando WIA CMD_SYNCHRONIZE numa chamada para o método IWiaItem::DeviceCommand). CoCreateInstance, IWiaDevMgr e IWiaItem são descritos na documentação do SDK do Microsoft Windows.

Outra maneira de atualizar a árvore de itens WIA é criar um evento nomeado no driver WIA. Um thread no driver WIA pode então aguardar que esse evento seja sinalizado. Sempre que apagar ou adicionar uma imagem por meio do driver TWAIN, o driver TWAIN sinaliza (ao chamar SetEvent (descrito na documentação do SDK do Windows)) sobre este evento nomeado. O thread no driver WIA será liberado e o driver WIA reconstruirá a árvore.

De qualquer forma, você deve reconstruir sua árvore para que ela reflita quaisquer alterações feitas nas imagens reais na câmera ou no scanner. Certifique-se de que, sempre que atualizar a árvore adicionando ou excluindo um item da árvore de itens, coloque um evento na fila (por exemplo, WIA_EVENT_ITEM_DELETED ou WIA_EVENT_TREE_UPDATED (para obter uma descrição desses e de outros identificadores de eventos WIA, consulte a documentação do SDK do Windows)). Se enviar com sucesso um evento quando a sua árvore mudar, isso resolverá o problema de o Meu Computador e outros aplicativos WIA não serem atualizados automaticamente.

Observação Embora os drivers TWAIN e WIA possam coexistir na mesma DLL, não podem compartilhar a mesma interface do utilizador. Cada driver deve ter sua própria interface do usuário.