Pregunta

En un proyecto de C ++ (es decir, no .NET) en Windows Mobile, estoy buscando una manera de comunicarme fácilmente entre dos aplicaciones que se ejecutan de forma independiente. La aplicación A ejecutaría un servicio, mientras que la aplicación B brindaría al usuario alguna funcionalidad, para lo cual B tiene que llamar a algunas de las funciones de A. Preferiría no pasar por la implementación de nada en COM.

De hecho, preferiría no hacer ningún tipo de serialización o similar (es decir, esto excluiría el uso de sockets / tuberías / archivos), sino que B pase todos los parámetros y los punteros a A, como si A fuera parte Además, las aplicaciones C, D y E deberían poder hacer lo mismo con solo una instancia de A en ejecución.

Debo agregar que a veces se supone que B devuelve una matriz (o std :: vector o std :: map) a A donde el tamaño no se conoce previamente.

¿Es esto posible en Windows Mobile y posiblemente en otras plataformas?

¿Fue útil?

Solución

No puedes simplemente compartir datos entre procesos. No recomiendo COM. Las tuberías no existen en Windows CE. Su mejor ruta es un archivo asignado en memoria (como en el escritorio) o una cola de mensajes punto a punto (nada como en el escritorio). Lo que es mejor depende de su escenario de uso.

No no intente usar la memoria de procesos cruzados con VirtualAlloc como se sugiere, ya que es un hack inseguro inseguro y no es compatible con CE 6.0 o posterior, por lo que terminará rompiendo bajo WinMo 7 y posterior .

No recomiendo usar mensajes de Windows y WM_COPYDATA. Es lento, torpe y muy propenso a errores.

Gente, no solo responda preguntas cuando no haya utilizado la plataforma solo para intentar ganar puntos de reputación. Si no conoces la plataforma, deja que alguien más ayude al chico en lugar de enviarlo a una caza de ganso salvaje.

Otros consejos

Ya que solo necesita la aplicación (B) para comunicarse con el servicio (A), ¿por qué no usa CreateFile y DeviceIoControl con un conjunto definido de IOCTLs?

Aquí está la buena fuente para comenzar con - http: // msdn. microsoft.com/en-us/library/aa446520.aspx Usted decide qué opción es la que mejor se adapta a sus necesidades.

Has cubierto casi todas las bases disponibles; COM, tuberías, sockets, archivos de memoria mapeados. Todos los procesos en Windows tienen espacios de memoria completamente separados, por lo que no puede compartir nada sin usar uno de esos mecanismos de IPC.

En Windows Mobile me parece recordar que todos los procesos se asignan al mismo espacio de direcciones. Por lo tanto, cree ventanas de mensajes en ambos procesos con nombres conocidos o nombres de clase y use FindWindow en cada proceso para encontrar el otro.

Luego, SendMessage con un ID de mensaje definido por WM_APP y un puntero a los datos para transmitir en wParam o lParam.

Si estoy equivocado y Mobile realiza la partición de la memoria de proceso, solo use WM_COPYDATA que, en el escritorio usa la asignación de memoria y, por lo tanto, es muy rápido, para enviar datos entre las aplicaciones.

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