Partilhar via


Compatibilidade com WIA-TWAIN

Se um dispositivo puder ter dois ou mais drivers, teste esses drivers completamente para obter compatibilidade uns com os outros. Por exemplo, se um driver deixar o dispositivo em um estado inutilizável (como o driver não enviar a mensagem de sessão de fechamento em algum protocolo), o outro driver poderá falhar quando tentar se comunicar com o dispositivo. Essa situação ocorre frequentemente com dispositivos seriais.

WIA e TWAIN na mesma DLL

Se você estiver executando um driver WIA e um driver TWAIN ao mesmo tempo 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. Essa árvore representa as pastas e imagens em sua câmera. Qualquer aplicativo que usa WIA (como Meu Computador ou Scanner e Assistente de 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 sobre essa 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 ordenar que seu 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 driver TWAIN, enumerar todos os dispositivos e pesquisar seu dispositivo. Uma maneira de identificar seu driver por meio dessa enumeração é criar uma propriedade personalizada no driver WIA para que, se o driver TWAIN consultar essa propriedade e ela existir, você saberá que ela é o driver WIA. Depois de ter o IWiaItem para o driver, envie um comando para o driver para recompilar sua árvore (por exemplo, envie um comando wia CMD_SYNCHRONIZE em uma chamada para o método IWiaItem::D eviceCommand ). 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 aguardar que esse evento seja sinalizado. Sempre que você exclui ou adiciona uma imagem por meio do driver TWAIN, o driver TWAIN sinaliza (chamando SetEvent (descrito na documentação do SDK do Windows)) nesse evento nomeado. O thread no driver WIA será liberado e o driver WIA recriará a árvore.

De qualquer forma, você deve recompilar sua árvore para que ela reflita as alterações feitas nas imagens reais na câmera ou scanner. Certifique-se de que sempre que você atualizar a árvore adicionando ou excluindo um item da árvore de itens, faça fila de um evento (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 você enviar com êxito um evento quando a árvore for alterada, isso resolverá o problema com Meu Computador e outros aplicativos WIA não sendo atualizados automaticamente.

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