Pregunta

Esta es solo una pregunta de programación a mitad de camino. En primer lugar, tengo una tarjeta PCI-Express y controladores de 32/64 bits. El sistema operativo de destino debe ser un sistema Windows de 64 bits. Leí que en Vista64 todos los controladores tienen que estar certificados como controladores de 64 bits. ¿Es esta una restricción general en sistemas operativos de 64 bits y esto también se aplica a & Quot; XP 64 & Quot; o cualquier sistema Linux?

Entonces, por simplicidad, digamos que uso un controlador de 64 bits para mi tarjeta PCIe en Vista64 y tengo un montón de DLL de 64 bits para usar la funcionalidad de las tarjetas. Por otro lado, hay un gran programa heredado de 32 bits que necesita usar el dispositivo PCIe. Convertir el programa a 64 bits sería un gran esfuerzo.

Entonces, ¿qué se puede hacer para unir ese programa de 32 bits y el controlador de 64 bits? Leí que no es posible mezclar binarios de 32/64 bits y archivos DLL, pero es difícil de creer para mí. Estoy seguro de que puede imprimir un documento en Vista64 desde una aplicación de 32 bits y Windows de alguna manera lo incluirá en un controlador de impresora de 64 bits.

¿Fue útil?

Solución

La certificación de 64 bits solo se requiere en Vista; no existe una autoridad de certificación para plataformas que no sean Windows, y no creo que XP o Windows Server comprueben la certificación (aunque no estoy seguro, y puede depender del paquete de servicio en el que se encuentre).

Si está utilizando el controlador a través de la API de Windows, entonces no debería haber ningún problema; Windows realizará las 32 & Lt; - & Gt; traducciones de 64 bits en el núcleo. Si está intentando cargar el controlador dentro de su propio proceso, eso probablemente no será posible. Como Dirk dice, tendrá que ejecutarlo dentro de su propio proceso y comunicarse a través de un servidor COM. No estoy seguro de qué obstáculos tendrá que saltar si tiene que ejecutar su controlador en un nivel de ejecución de mayor privilegio y desea realizar llamadas desde el modo de usuario.

Esperemos que sus DLL de 64 bits ofrezcan una API de 32 bits o Windows ofrezca una interfaz de controlador estándar (si se trata de un dispositivo de E / S común, como una pantalla o una tarjeta de red).

Otros consejos

¿Su aplicación de 32 bits llama directamente al controlador? (¡Estoy adivinando un simulador para el controlador!)

La única forma de comunicarse entre dlls de 32 bits y 64 bits es escribir un servidor COM que gestione la comunicación (léase: ajuste las llamadas de las aplicaciones O las respuestas del controlador de 64 bits) en el medio.

Una cosa que volvió a morderme: cuando escribí este servidor COM por primera vez (sí, yo también tuve que soportar muchas noches de insomnio antes de conocer este truco) solo construí la versión de 32 bits de ( autogenerado) proxy / stub dll. Se produjo otro episodio de noches de insomnio antes de conocer la solución: construir el proxy / stub dll para 32 bits y 64 bits. El lado de 32 bits trata con el lado de 32 bits (en su caso, la aplicación) y el lado de 64 bits con el lado de 64 bits (el controlador). COM administra cómo las diferentes versiones del proxy / stub se comunican entre sí. Y, oh, registre el servidor en su sistema. Fácil, verdad?

Creo que el objetivo de un controlador es abstraer el funcionamiento real del hardware y presentar una interfaz común para el software. En este caso, el controlador PCIe debe ser de 64 bits para que pueda actuar como intermediario entre Windows y el hardware, pero creo que una aplicación de 32 bits podría acceder al dispositivo sin ningún problema.

Lo que se entiende por esa incompatibilidad sobre la que lees es que los ensamblajes de 32 y 64 bits no pueden ser parte de la misma aplicación: una aplicación debe apuntar a uno u otro, aunque la aplicación de 32 bits generalmente funciona bien en Windows x64 con WoW64, que solo actúa como traductor.

¿Actualmente tiene problemas o simplemente pregunta hipotéticamente?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top