Pergunta

Esta é apenas uma questão de programação no meio do caminho. Primeiro de tudo eu tenho uma placa PCI-Express e 32/64 bit drivers. O sistema operacional de destino tem de ser um sistema Windows de 64 bits. Eu li que sob Vista64 todos os drivers têm de ser certificadas 64 bit drivers. Será esta uma restrição geral em sistemas operacionais de 64 bits e que isso também se aplica a qualquer sistema Linux "XP 64" ou?

Assim, para simplificar, digamos que eu use um driver de 64 bits para o meu cartão PCIe sob Vista64 e tem um monte de 64 DLLs bits para usar a funcionalidade de cartões. Por outro lado há um grande legado 32 programa exe, bit que precisa para usar o dispositivo PCIe. Convertendo o programa para 64 bits seria realmente um enorme esforço.

Então, o que pode ser feito para trazer esse programa de 32 bits eo driver de 64 bit juntos? Eu li que a mistura 32/64 binários bit e DLLs não é possível a todos, mas isso é difícil de acreditar para mim. Tenho certeza que você pode imprimir um documento em Vista64 de dentro de um aplicativo de 32 bits e Windows, de alguma forma envolvê-em torno de um driver de impressora de 64 bits.

Foi útil?

Solução

64-bit certificação só é necessária no Vista; não há nenhuma autoridade de certificação para plataformas não-Windows, e eu não acredito que os controlos XP ou Windows Server para a certificação (não tenho certeza embora, e ele pode depender de qual service pack você está no).

Se você estiver usando o driver por meio da API do Windows, então não deve haver qualquer problema; Windows irá fazer os 32 <-> traduções de 64 bits do kernel. Se você está tentando carregar o driver dentro do seu próprio processo, que provavelmente não vai ser possível. Como diz Dirk você terá que executá-lo dentro de seu próprio processo e comunicar através de um servidor COM. Eu não tenho certeza do que aros você vai ter que saltar através se você tem que executar o seu motorista em um nível de execução de maior privilégio e quiser fazer chamadas a ele de modo de usuário.

Esperemos que o seu 64-bit DLLs oferecer um 32-bit API, ou Windows oferece uma interface de driver padrão (se é um dispositivo comum I / O como um monitor ou placa de rede).

Outras dicas

A sua aplicação de 32 bits chamar diretamente o motorista? (Eu estou supondo um simulador para o motorista!)

A única maneira de se comunicar entre DLLs de 32 bits e 64 bits é escrever um servidor COM que gerencia a comunicação (leia-se: envoltório ou o aplicações chamadas ou as respostas de drivers de 64 bits). Intermediárias

Uma coisa que voltou a morder-me: Quando eu escrevi este servidor COM (sim, eu também teve de suportar muitas noites sem dormir antes que eu vim a saber deste truque) Eu só construiu a versão de 32-bit ( auto-gerado) dll proxy / stub. Outro ataque de noites sem dormir se seguiu antes de eu vim a saber da solução: criar a DLL proxy / stub para ambos os 32-bit e 64-bit. O lado 32 bits lida com o lado de 32 bits (no seu caso, a aplicação) e a 64 bits com o lado de 64 bits (o condutor). COM gere o modo como as versões differnt do proxy / stub falar uns com os outros. E oh, fizer o servidor registrado em seu sistema. Fácil, não é?

Eu acho que todo o ponto de um motorista é abstrair os realmente funcionamento do hardware e apresentar uma interface comum para o software. Neste caso, as necessidades motorista PCIe para ser 64-bit de modo que ele pode agir como um intermediário para Windows e do hardware, mas eu acho que uma aplicação de 32 bits poderia, então, acessar o dispositivo sem quaisquer problemas em tudo.

O que quis dizer com isso incompatibilidade você ler sobre é que os conjuntos 32 e 64 bits não pode ser parte do mesmo aplicativo - um aplicativo tem para atingir um ou o outro, embora a aplicação de 32 bits irá geral bem executado no Windows x64 usando WoW64, que apenas atua como um tradutor.

Você está atualmente enfrentando problemas, ou você está apenas pedindo hipoteticamente?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top