Comunicação entre dois programas

29/03/2006

0

Preciso fazer dois programas (na mesma máquina) comunicarem-se. Preciso passar vários valores de um programa para outro. Se fosse apenas um valor eu usaria Mensagens do Windows, mas com vários valores não sei como.

Teria como o programa que vai receber os valores me passar o endereço de memória de uma função via mensagem do windows e eu usar um prototipo de função no endereço para retornar os valores? Mais ou menos como uma DLL faz?


Rodc

Rodc

Responder

Posts

29/03/2006

Ipc$

Pesquise por SendMessage e WM_CopyData


Responder

29/03/2006

Michael

Vc pode usar mensagens do Windows para passar vários valores de um programa para o outro, como uma estrutura complexa de um record, por exemplo.

[url=http://subsimple.com/delphi.asp]Neste site[/url] vc vai encontrar o componente [b:a1a91260c8]InterAppComm[/b:a1a91260c8], que permite enviar mensagens entre programas com extrema facilidade, inclusive records, como mencionei acima. Basicamente basta colocar um [b:a1a91260c8]Sender [/b:a1a91260c8]em uma aplicação e um [b:a1a91260c8]Receiver [/b:a1a91260c8]na outra, e controlar a comunicação através dos eventos publicados pelos controles.

Dependendo do seu caso, talvez uma mudança no código fonte do programa seja necessária para realizar envios assíncronos. Se não me falha a memória basta trocar a função da API utilizada.

Qualquer dúvida, poste aqui.

[]´s


Responder

29/03/2006

Rodc

Valeu pelas dicas. Estou pesquisando o WM_CopyData e parece que vai resolver meu problema.
Na verdade a ´outra aplicação´ não é minha, e não necessariamente vai ser em Delphi, eu só vou ter o Handle da aplicação para postar a mensagem.
Mas se tiverem mais sugestões, são bem vindas.


Responder

29/03/2006

Ipc$

Mas a outra aplicação deve estar preparada para receber a msg WM_CopyData.


Responder

29/03/2006

Rodc

[quote:9a25d07708=´ipc$´]Mas a outra aplicação deve estar preparada para receber a msg WM_CopyData.[/quote:9a25d07708]
Sim, daí eu vou falar para quem quiser receber a informação do meu sistema criar uma aplicação que me passe o Handle dela e que receba a mensagem WM_CopyData.

Encontrei este site que explica bem fácil como implementar este procedimento: [url]http://delphi.about.com/od/windowsshellapi/a/wm_copydata.htm[/url]


Responder

29/03/2006

Rodc

Só tem um problema ao usar o WM_COPYDATA, não posso usar o PostMessage e o SendMessage fica aguardando a aplicação de destino processar a mensagem.
Neste caso meu sistema pode travar caso a outra aplicação esteja travada ou demore para responder.
Será que não tem outra forma de passar um texto por mensagem sem ser usando o WM_COPYDATA?


Responder

29/03/2006

Dopi

Acho que as técnicas indicadas são de certa dificuldade para a maioria dos programadores...
Apenas comento isso, porque se vc pretende fazer um programa, para que ´terceiros´ interajam com ele... Use algo extremamente simples e acessível a diversas linguagens... como por exemplo:
- Troca de arquivos TXT (assim como é feito pelas Operadoras de Cartão de Crédito com o programa de T.E.F.)
- Sockets (TCP/IP)


Responder

29/03/2006

Rodc

Você tem razão.
É que os dois programas estarão rodando na mesma máquina e a troca de dados tem que ser bem rápida, a cada 300 milisegundos.
Mas estou pensando em abrir uma comunicação UDP em alguma porta da própria máquina.


Responder

29/03/2006

Michael

Só tem um problema ao usar o WM_COPYDATA, não posso usar o PostMessage e o SendMessage fica aguardando a aplicação de destino processar a mensagem. Neste caso meu sistema pode travar caso a outra aplicação esteja travada ou demore para responder. Será que não tem outra forma de passar um texto por mensagem sem ser usando o WM_COPYDATA?


[b:f8fd7b5b83]SendMessage [/b:f8fd7b5b83]é síncrono, ou seja, vai esperar uma resposta para permitir o fluxo do programa. [b:f8fd7b5b83]PostMessage [/b:f8fd7b5b83]não é, mas vc disse que não pode usá-lo. Tente então a API [b:f8fd7b5b83]SendMessageTimeout[/b:f8fd7b5b83]. Nela vc passa um parâmetro informando o tempo em que deve esperar por uma resposta para continuar, se a janela ´alvo´ não estiver na mesma thread que o seu programa.

[]´s


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar