La comunicación entre procesos entre 32 y 64 bits, las aplicaciones en Windows x64

StackOverflow https://stackoverflow.com/questions/505647

  •  21-08-2019
  •  | 
  •  

Pregunta

Nos gustaría apoyar algunas de hardware, que recientemente ha sido descontinuado.El controlador para el hardware es un procesador de 32-bit DLL de C.No tenemos el código fuente, y (por razones legales) no están interesados en descompilar o aplicar ingeniería inversa en el controlador.

El hardware envía toneladas de datos de forma rápida, por lo que el protocolo de comunicación debe ser bastante eficiente.

Nuestro software es un nativo de 64-bits de C++ de la aplicación, pero nos gustaría tener acceso al hardware a través de un proceso de 32 bits.¿Qué es un eficiente, elegante manera de 32 bits y de 64 bits, las aplicaciones se comuniquen el uno con el otro (que, idealmente, no se trata de inventar un nuevo protocolo)?

La solución debe estar en C/C++.

Actualización:varios de los encuestados pidió que se aclarara si esto era un modo de usuario o controlador de modo de núcleo.Afortunadamente, es un modo de usuario del controlador.

¿Fue útil?

Solución

Si esto es un verdadero controlador (modo kernel), estás SOL. Vista x64 no permite la instalación de controladores no firmados. Que esto es sólo una DLL en modo de usuario, se puede obtener una solución mediante el uso de cualquiera de los mecanismos IPC estándar. Tuberías, tomas de corriente, fuera de proc COM, más o menos en ese orden. Todo funciona a velocidades de bus de manera que el tiempo que puede amortiguar los datos suficientes, la sobrecarga cambio de contexto no debe doler demasiado.

Otros consejos

Me acaba de utilizar sockets. Permitiría que lo use sobre IP si lo necesita en el futuro, y no será atado a una API de mensajería. Si en el futuro desea implementar esto en otro sistema operativo o lenguaje, se puede.

Este artículo pueda ser de interés. Se discute el problema y sugiere el uso de COM como una solución. No soy un gran fan de COM pero dada su ubicuidad en el universo de Windows, es posible que puede ser que sea lo suficientemente eficiente. Es probable que desee al arquitecto su solución para que pueda datos del lote (que no quiere hacer una llamada COM para cada elemento de los datos).

elegante? C ++? DCOM / RPC llama a sí mismo podría funcionar, o se puede crear una canalización con nombre y usarlo para hablar entre los dos procesos (tal vez crear una "clase cMessage" o algo así), aunque cuidado con diferente estructura de la alineación entre x86 y x64.

Si el conductor hace llegar a ser un verdadero conductor, nobugz es casi justo - que vas a tener que trabajar mucho más duro, no estás completamente SOL. Una solución consiste en instalar Win32 en alguna otra máquina (o máquina virtual) y luego usar alguna forma de RPC, tales como tomas de corriente (como se sugiere por Pyrolistical) o UDP o MQ o incluso Tibco Rendezvous (que afirma apoyar un rendimiento muy alto con el fin para manejar los volúmenes de datos generados por los mercados financieros -. al menos eso es lo que recuerdo de vuelta en los viejos tiempos)

Un archivo asignado en memoria, compartida por ambos lados tendría el mismo contenido. El sistema operativo tendrá que hacer algunas cosas interesantes puntero para que esto ocurra, pero muy probablemente será capaz de configurar los 2 puntos de vista, de tal manera que no se está copiando la memoria físicamente alrededor. Cero copias es casi tan bueno como se pone

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