Pergunta

Em um projeto C ++ (ou seja, sem NET) em Windows Mobile, eu estou procurando uma maneira de se comunicar facilmente entre dois aplicativos executados de forma independente. Uma aplicação seria executado um serviço, que a aplicação B iria fornecer ao usuário algumas funcionalidades - para o qual B tem que chamar algumas das funções de A. Eu preferia não ir através da implementação de qualquer coisa em COM.

Na verdade, eu preferiria não fazer qualquer tipo de serialização ou similar (ou seja, este excluiria utilizando soquetes / tubos / arquivos), mas sim ter B passar todos os parâmetros e indicadores sobre a A, como se A fosse parte de B. Além disso, os aplicativos C, D e e devem ser capazes de fazer o mesmo com apenas um exemplo de uma execução.

Devo acrescentar que B, por vezes, deve retornar um array (ou std :: vector ou std :: mapa) para A, onde o tamanho não é conhecido anteriormente.

Isso é possível em Windows Mobile e possivelmente outras plataformas?

Foi útil?

Solução

Você pode não apenas compartilhar dados entre processos. Eu não recomendo COM. Pipes não existem no Windows CE. Seu melhor caminho é ou um memória mapeada arquivo (como no desktop) ou um ponto de mensagem ponto fila (nada como na área de trabalho). O que é melhor depende do seu cenário de uso.

Do não tentar usar memória do processo cruz com VirtualAlloc como sugerido, como é um corte inseguro inseguro e não é suportada no CE 6.0 ou posterior assim que você vai acabar quebrando sob WinMo 7 e posterior .

Eu não recomendo o uso de mensagens janelas e WM_COPYDATA. É lento, kludgy, e altamente propenso a erros.

As pessoas, por favor, não apenas responder a perguntas quando você não tenha usado a plataforma apenas para tentar ganhar pontos de reputação. Se você não sabe a plataforma, deixar alguém ajuda o cara em vez de enviá-lo em um ganso selvagem.

Outras dicas

Uma vez que você só precisa do aplicativo (B) para se comunicar com o serviço (A), por que você não apenas usar CreateFile e DeviceIoControl com um conjunto definido de IOCTLs?

Aqui está a boa fonte para começar - http: // MSDN. microsoft.com/en-us/library/aa446520.aspx Você decide qual opção é o mais adequado para suas necessidades.

Você cobriu praticamente todas as bases disponíveis; COM, tubos, soquetes, arquivos de memória mapeada. Todos os processos no Windows têm espaços de memória completamente separadas, de modo que você não pode compartilhar qualquer coisa sem usar um desses mecanismos de IPC.

Em Windows Mobile Eu me lembro que todos os processos são mapeados para o mesmo espaço de endereço. Então, criar janelas de mensagens em ambos os processos com nomes conhecidos e ou nomes de classes e uso FindWindow em cada processo para encontrar o outro.

Então, SendMessage com um WM_APP definido ID de mensagem e um ponteiro para os dados para transmissão em wParam ou lParam.

Se eu estiver errado e móvel faz memória do processo de partição, então é só usar WM_COPYDATA que - no mapeamento de memória usos de desktop e assim é muito rápido -. Para enviar dados entre os aplicativos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top