Question

Ceci est seulement une question de programmation à mi-parcours. Tout d’abord, j’ai une carte PCI-Express et des pilotes 32/64 bits. Le système d'exploitation cible doit être un système Windows 64 bits. J'ai lu que sous Vista64, tous les pilotes doivent être certifiés 64 bits. S'agit-il d'une restriction générale sous les systèmes d'exploitation 64 bits et cela s'applique-t-il également à & Quot; XP 64 & Quot; ou n'importe quel système Linux?

Donc, pour simplifier, supposons que j’utilise un pilote 64 bits pour ma carte PCIe sous Vista64 et que je dispose de plusieurs DLL 64 bits pour utiliser les fonctionnalités de la carte. De l’autre côté, il existe un grand programme exe 32 bits hérité qui doit utiliser le périphérique PCIe. Convertir le programme en 64 bits serait un effort vraiment énorme.

Alors, que peut-on faire pour réunir ce programme 32 bits et le pilote 64 bits? J'ai lu qu'il est impossible de mélanger des fichiers binaires 32/64 bits et des DLL, mais c'est difficile à croire pour moi. Je suis sûr que vous pouvez imprimer un document sous Vista64 à partir d'une application 32 bits et que Windows va en quelque sorte l'envelopper dans un pilote d'imprimante 64 bits.

Était-ce utile?

La solution

La certification 64 bits n’est requise que sous Vista; il n'y a pas d'autorité de certification pour les plateformes autres que Windows et je ne pense pas que XP ou Windows Server vérifie la certification (pas sûr, et cela peut dépendre du service pack sur lequel vous êtes).

Si vous utilisez le pilote via l'API Windows, il ne devrait y avoir aucun problème. Windows fera les 32 & Lt; - & Gt; traductions en 64 bits du noyau. Si vous essayez de charger le pilote dans votre propre processus, cela ne sera probablement pas possible. Comme Dirk le dit, vous devrez l'exécuter dans son propre processus et communiquer via un serveur COM. Je ne suis pas sûr des obstacles à franchir si vous devez exécuter votre pilote dans un niveau d'exécution avec des privilèges plus élevés et si vous souhaitez lui passer des appels en mode utilisateur.

Espérons que vos DLL 64 bits offrent une API 32 bits ou Windows propose une interface de pilote standard (s’il s’agit d’un périphérique d’E / S courant tel qu’un écran ou une carte réseau).

Autres conseils

Votre application 32 bits appelle-t-elle directement le pilote? (Je suppose un simulateur pour le conducteur!)

La seule façon de communiquer entre des dll 32 bits et 64 bits consiste à écrire un serveur COM qui gère la communication (lire: encapsuler SOIT les appels des applications OU les réponses du pilote 64 bits) entre les deux.

Une chose qui m’a fait mordre: quand j’ai écrit ce serveur COM pour la première fois (oui, j’ai moi aussi dû supporter de nombreuses nuits sans sommeil avant de connaître cette astuce), je n’ai construit que la version 32 bits du ( dll proxy / stub généré automatiquement. Une autre série de nuits sans sommeil s’est ensuivie avant que je ne connaisse la solution: créez la DLL proxy / stub pour les versions 32 bits et 64 bits. Le côté 32 bits concerne le côté 32 bits (dans votre cas, l'application) et les 64 bits avec le côté 64 bits (le pilote). COM gère la manière dont les différentes versions du proxy / stub se parlent. Et oh, obtenez le serveur enregistré sur votre système. Facile, non?

Je pense que l’intérêt d’un pilote est d’abréger le fonctionnement réel du matériel et de présenter une interface commune au logiciel. Dans ce cas, le pilote PCIe doit être en 64 bits pour pouvoir servir d'intermédiaire entre Windows et le matériel, mais je penserais qu'une application 32 bits pourrait alors accéder au périphérique sans aucun problème.

L’incompatibilité que vous avez évoquée signifie que les assemblys 32 et 64 bits ne peuvent pas faire partie de la même application - une application doit cibler l’un ou l’autre, bien que les applications 32 bits soient généralement fonctionne bien sous Windows x64 en utilisant WoW64, qui agit uniquement en tant que traducteur.

Avez-vous des problèmes ou posez-vous simplement une question hypothétique?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top