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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar