2008-10-14 13 views
5

En un proyecto de C++ (es decir, no .NET) en Windows Mobile, estoy buscando una forma de comunicarse fácilmente entre dos aplicaciones que se ejecutan de manera independiente. La aplicación A ejecutaría un servicio, mientras que la aplicación B proporcionaría al usuario alguna funcionalidad, para lo cual B tiene que llamar a algunas de las funciones de A. Prefiero no implementar nada en COM.¿Fácil IPC en Windows Mobile?

De hecho, preferiría no hacer ningún tipo de serialización o similar (es decir, esto excluiría el uso de sockets/pipes/files), sino que B pase todos los parámetros y punteros a A, como si A estuviera parte de B. 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?

Respuesta

14

No puede simplemente compartir datos entre procesos. No recomiendo COM. Las tuberías no existen en Windows CE. Su mejor ruta es memory mapped file (como en el escritorio) o point to point message queue (nada como en el escritorio). Lo que es mejor depende de su escenario de uso.

hacer no trate de usar memoria entre procesos con VirtualAlloc como se sugiere, ya que es un truco peligroso inseguro y no es compatible con el CE 6.0 o posterior para que va a terminar rompiendo bajo Windows Mobile 7 y versiones posteriores.

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

Personas, por favor no solo contesten preguntas cuando no han usado la plataforma solo para tratar de ganar puntos de reputación. Si no conoces la plataforma, deja que otra persona lo ayude en lugar de enviarlo a una búsqueda inútil.

+0

Gracias, después de leer sobre esto un poco más, creo que tendré que usar un socket local (esto debería funcionar en todas las plataformas móviles) – Steven

+0

Sería mejor pinvoking los métodos de cola de mensajes para .Net CF también ? Estábamos pensando en hacer la tonta tabla Sql tocando con las bibliotecas Sqlite. – RoboJ1M

+0

para las colas punto a punto, sí, P/Invocar es la única opción. Ya han terminado aquí: http://msdn.microsoft.com/en-us/library/aa446556.aspx – ctacke

-1

Cubrió prácticamente todas las bases disponibles; COM, pipes, sockets, archivos mapeados de memoria. 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.

-3

En Windows Mobile, parece recordar que todos los procesos están mapeados en el 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.

A continuación, envíe el mensaje con un ID de mensaje definido WM_APP y un puntero a los datos para transmitir en wParam o lParam.

Si estoy equivocado y Mobile realiza la memoria del proceso de partición, entonces simplemente use WM_COPYDATA que, en el escritorio utiliza la asignación de memoria y es muy rápido, para enviar datos entre las aplicaciones.

0

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

Cuestiones relacionadas