Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Se um dispositivo puder ter dois ou mais drivers, teste esses drivers minuciosamente quanto à 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 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 da WIA da DLL criará a árvore de itens WIA. Essa árvore representa as pastas e as imagens em sua câmera. Qualquer aplicativo que usa WIA (como Meu Computador ou Verificador 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 o driver WIA atualize a árvore de itens quando uma imagem tiver sido 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 o driver por meio dessa enumeração é criar uma propriedade personalizada no seu driver WIA para que, se o driver TWAIN consultar essa propriedade e ela existir, você saberá que ele é o seu driver WIA. Depois de ter o IWiaItem para seu driver, envie um comando ao driver para reconstruir sua árvore (por exemplo, envie um comando WIA CMD_SYNCHRONIZE em uma 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. Uma thread em seu driver WIA pode então esperar que esse evento seja sinalizado. Sempre que você excluir ou adicionar uma imagem por meio do driver TWAIN, o driver TWAIN sinaliza (chamando SetEvent (descrito na documentação do SDK do Windows)) neste evento nomeado. A thread do driver WIA será liberada e o driver WIA recriará a árvore.
De qualquer forma, você deve reconstruir sua árvore assim 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, é importante que você enfileire um evento (por exemplo, WIA_EVENT_ITEM_DELETED ou WIA_EVENT_TREE_UPDATED (para obter uma descrição desses e de outros identificadores de evento WIA, consulte a documentação do SDK do Windows)). Se você enviar um evento com êxito 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.