Comunicação entre dois programas
29/03/2006
0
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
Posts
29/03/2006
Michael
[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
29/03/2006
Rodc
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.
29/03/2006
Ipc$
29/03/2006
Rodc
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]
29/03/2006
Rodc
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?
29/03/2006
Dopi
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)
29/03/2006
Rodc
É 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.
29/03/2006
Michael
[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
Clique aqui para fazer login e interagir na Comunidade :)