Domanda

Questa è solo una domanda di programmazione a metà strada. Prima di tutto ho una scheda PCI-Express e driver a 32/64 bit. Il sistema operativo di destinazione deve essere un sistema Windows a 64 bit. Ho letto che in Vista64 tutti i driver devono essere certificati driver a 64 bit. Si tratta di una restrizione generale nei sistemi operativi a 64 bit e vale anche per & Quot; XP 64 & Quot; o qualsiasi sistema Linux?

Quindi, per semplicità, supponiamo che io usi un driver a 64 bit per la mia scheda PCIe sotto Vista64 e ho un sacco di DLL a 64 bit per usare la funzionalità delle carte. Dall'altro lato c'è un grande programma legacy exe a 32 bit che deve usare il dispositivo PCIe. La conversione del programma a 64 bit sarebbe uno sforzo davvero enorme.

Quindi cosa si può fare per riunire quel programma a 32 bit e il driver a 64 bit? Ho letto che non è possibile mescolare binari e DLL a 32/64 bit, ma è difficile da credere per me. Sono sicuro che puoi stampare un documento con Vista64 da un'app a 32 bit e Windows lo avvolgerà in qualche modo in un driver della stampante a 64 bit.

È stato utile?

Soluzione

La certificazione a 64 bit è richiesta solo in Vista; non esiste un'autorità di certificazione per piattaforme non Windows e non credo che XP o Windows Server controllino la certificazione (non ne sono sicuro, e potrebbe dipendere dal service pack in uso).

Se si utilizza il driver tramite l'API di Windows, non dovrebbero esserci problemi; Windows eseguirà le traduzioni a 32 & Lt; - & Gt; 64-bit nel kernel. Se stai cercando di caricare il driver all'interno del tuo processo, probabilmente non sarà possibile. Come dice Dirk, dovrai eseguirlo all'interno del proprio processo e comunicare attraverso un server COM. Non sono sicuro di quali cerchi dovrai saltare se devi eseguire il tuo driver in un livello di esecuzione con privilegi più alti e desideri effettuare chiamate da esso in modalità utente.

Si spera che le DLL a 64 bit offrano un'API a 32 bit o Windows offra un'interfaccia driver standard (se si tratta di un dispositivo I / O comune come un display o una scheda di rete).

Altri suggerimenti

L'applicazione a 32 bit chiama direttamente il driver? (Sto indovinando un simulatore per il conducente!)

L'unico modo per comunicare tra dll a 32 e 64 bit è scrivere un server COM che gestisca la comunicazione (leggi: avvolgi ENTRO le chiamate delle applicazioni OPPURE le risposte del driver a 64 bit) tra.

Una cosa che è tornata a mordermi: quando ho scritto per la prima volta questo server COM (sì, anche io ho dovuto sopportare molte notti insonni prima di venire a conoscenza di questo trucco) ho costruito solo la versione a 32 bit di ( generato automaticamente) proxy / stub dll. Un altro attacco di notti insonni è seguito prima che venissi a conoscenza della soluzione: creare la proxy / stub dll sia a 32-bit che a 64-bit. Il lato a 32 bit si occupa del lato a 32 bit (nel tuo caso l'applicazione) e quello a 64 bit con il lato a 64 bit (il driver). COM gestisce il modo in cui le diverse versioni del proxy / stub si dialogano. E oh, fai registrare il server sul tuo sistema. Facile vero?

Penso che il punto centrale di un driver sia quello di sottrarre il funzionamento effettivo dell'hardware e presentare un'interfaccia comune al software. In questo caso, il driver PCIe deve essere a 64 bit in modo che possa fungere da intermediario per Windows e l'hardware, ma penso che un'applicazione a 32 bit potrebbe quindi accedere al dispositivo senza problemi.

Ciò che si intende per incompatibilità di cui si legge è che gli assembly a 32 e 64 bit non possono far parte della stessa applicazione: un'applicazione deve essere indirizzata all'una o all'altra, sebbene l'applicazione a 32 bit generalmente funziona bene su Windows x64 usando WoW64, che funge solo da traduttore.

Attualmente stai riscontrando problemi o stai solo chiedendo ipoteticamente?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top