Domanda

In un progetto C ++ (cioè senza .NET) su Windows Mobile, sto cercando un modo per comunicare facilmente tra due applicazioni in esecuzione indipendente. L'applicazione A eseguirà un servizio, mentre l'applicazione B fornirebbe all'utente alcune funzionalità, per le quali B deve chiamare alcune delle funzioni di A. Preferirei non passare attraverso l'implementazione di qualcosa in COM.

In effetti, preferirei non fare alcun tipo di serializzazione o simile (cioè questo escluderebbe l'utilizzo di socket / pipe / file), ma piuttosto fare in modo che B passi tutti i parametri e i puntatori su A, proprio come se A fosse parte di B. Inoltre, le app C, D ed E dovrebbero poter fare lo stesso con una sola istanza di A in esecuzione.

Dovrei aggiungere che a volte B dovrebbe restituire un array (o std :: vector o std :: map) su A dove la dimensione non è nota in precedenza.

È possibile su Windows Mobile e forse su altre piattaforme?

È stato utile?

Soluzione

Non puoi semplicemente condividere dati tra processi. Non consiglio COM. I tubi non esistono in Windows CE. Il percorso migliore è un file mappato in memoria (come sul desktop) o un coda di messaggi punto a punto (niente di simile sul desktop). Quale è meglio dipende dal tuo scenario di utilizzo.

Non non provare a usare la memoria cross process con VirtualAlloc come suggerito, poiché è un hack non sicuro e non è supportato su CE 6.0 o versioni successive, quindi finirai per rompere sotto WinMo 7 e versioni successive .

Non consiglio di usare i messaggi di Windows e WM_COPYDATA. È lento, kludgy e altamente soggetto a errori.

Persone, per favore non solo rispondere alle domande quando non hai usato la piattaforma solo per cercare di guadagnare punti reputazione. Se non conosci la piattaforma, lascia che qualcun altro aiuti il ??ragazzo invece di mandarlo a caccia di un'oca selvatica.

Altri suggerimenti

Dato che hai solo bisogno dell'applicazione (B) per comunicare con il servizio (A), perché non usi semplicemente CreateFile e DeviceIoControl con un set definito di IOCTLs?

Ecco la buona fonte per iniziare - http: // msdn. microsoft.com/en-us/library/aa446520.aspx Decidi tu quale opzione è la più adatta alle tue esigenze.

Hai coperto praticamente tutte le basi disponibili; COM, pipe, socket, file mappati in memoria. Tutti i processi in Windows hanno spazi di memoria completamente separati, quindi non puoi condividere nulla senza usare uno di quei meccanismi IPC.

Su Windows Mobile mi sembra di ricordare che tutti i processi sono mappati nello stesso spazio degli indirizzi. Quindi, crea finestre di messaggio in entrambi i processi con nomi noti o o nomi di classe e usa FindWindow in ciascun processo per trovare l'altro.

Quindi, SendMessage con un ID messaggio definito WM_APP e un puntatore ai dati da trasmettere in wParam o lParam.

Se sbaglio e Mobile esegue il partizionamento della memoria di processo, utilizza semplicemente WM_COPYDATA che, sul desktop utilizza la mappatura della memoria e quindi è molto veloce, per inviare dati tra le app.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top