Fórum Problemas utilizando PostMessage #212121
06/02/2004
0
Não sei porque mas o PostMessage parou de funcionar aqui. Estou usando a mensagem Wm_CopyData para manter uma comunicação entre EXE/DLL.
Então na DLL eu fiz assim:
var MinhaEstrutura: TMinhaEstrutura; wmCopyData: TCopyDataStruct; begin wmCopyData.dwData := 0; wmCopyData.cbData := SizeOf( TMinhaEstrutura ); wmCopyData.lpData := @MinhaEstrutura; PostMessage( Handle_Do_Formulario_Do_Exe, WM_COPYDATA, 0, Integer( @WmCopyData ) ); end;
E no formulario do meu EXE eu coloquei no Private para interceptar o WM_COPYDATA:
Private procedure Intercepta(var Msg: TWMCopyData); message WM_COPYDATA;
procedure TMeuFormularioPrincipal.Intercepta(var Msg: TWMCopyData); begin ShowMessage( ´Mensagem recebida´ ); end;
Mas o problema é que não esta caindo na funcao Intercepta. Alguem sabe porque?
Eu tenho certeza absoluta de que o Handle_Do_Formulario_Do_Exe está certo.
Obrigado!
Nildo
Curtir tópico
+ 0Posts
06/02/2004
Nildo
Gostei + 0
06/02/2004
Beppe
Gostei + 0
06/02/2004
Nildo
Gostei + 0
06/02/2004
Beppe
Gostei + 0
06/02/2004
Nildo
O que o sendMessage retorna? Ele retorna inteiro. Mas o que é este numero?
Gostei + 0
06/02/2004
Beppe
Dá uma pesquisada por WM_COPYDATA e SendMessage em [url]http://msdn.microsoft.com/library[/url]. Tá lá com Windows User Interface(mas usa a busca).
Gostei + 0
06/02/2004
Nildo
[quote:40fd37c750=´Um autor desconhecido´]It´s worth noting that the WM_COPYDATA message will work going to and from any combination of 6/32 bit applications. Finally, be aware that the call to SendMessage will not return untill the message is processed. [b:40fd37c750]Also be aware that you should never use PostMessage() with the WM_COPYDATA message[/b:40fd37c750].[/quote:40fd37c750]
Gostei + 0
06/02/2004
Beppe
Exato. Pelo fato de que esta mensagem é interpretada pelo Windows(as outras são apenas mesnsagens). Quando chama SendMessage, o Windows aloca um bloco de memória no contexto do processo que recebe e copia os dados passados pra esse buffer. A janela que recebe a mensagem deve usar imediatamente o conteúdo do buffer, já que o Windows libera o buffer tão logo a mensagem é processada.
Mas você disse que ´parou de funcionar´...De repente?
Gostei + 0
06/02/2004
Nildo
Gostei + 0
06/02/2004
Beppe
Como está passando este handle?
Gostei + 0
07/02/2004
Nildo
Eh que se tratava de uma DLL. Dae eu estava colocando um valor nela em uma outra procedure. Dae eu estava chamando outra instancia dela que carregava na memoria outro valor do Handle do EXE. Agora eu estou compartilhando um espaco na memoria para poder ser lidaa atravez do EXE e da DLL ao mesmo tempo e o mesmo valor e funcionou =P
Valews
Gostei + 0
07/02/2004
Nildo
Eh que se tratava de uma DLL. Dae eu estava colocando um valor nela em uma outra procedure. Dae eu estava chamando outra instancia dela que carregava na memoria outro valor do Handle do EXE. Agora eu estou compartilhando um espaco na memoria para poder ser lidaa atravez do EXE e da DLL ao mesmo tempo e o mesmo valor e funcionou =P
Valews
Gostei + 0
07/02/2004
Beppe
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)