SendMessage com problema no Windows 9x (nos demais está OK)

Delphi

01/11/2005

Galera,

Tenho o seguinte código:

[b:acf4d1e33d]procedure Envia;
var
CDS: TCopyDataStruct;
DebugWin: hWnd;
begin
DebugWin := FindWindow(´TForm1´, nil); //TFmDebug : Classe do Form ( T + Nome do form)
CDS.cbData := Length(´1´) + 4;
CDS.dwData := 0;
CDS.lpData := PChar(´1´+#0); //0 é necessário para indicar fim da mensagem pra quem recebe a mensagem;
[color=blue:acf4d1e33d]SendMessage(DebugWin, WM_COPYDATA, WPARAM(Application.Handle), LPARAM(@CDS));[/color:acf4d1e33d]
end;[/b:acf4d1e33d]

Meu problema é que o código acima FUNCIONA PERFEITAMENTE no Windows XP e no Windows 2000 mas, na última linha (a em azul no código acima) dá pau no Windows 98. O interessante é que o aplicativo que recebe a mensagem a recebe normalmente pois ele exibe a mensagem mas sempre que executo no Windows 98 dá pau. Alguma sugestão? Detalhe: essa procedure é chamada de dentro de uma DLL. A DLL foi compilada no Windows XP e depois no Windows 98 e problema continua.


Willian

Willian

Curtidas 0

Respostas

Nildo

Nildo

01/11/2005

Na verdade, o erro é no seu CallBack. Pois se der erro lá, vai dar erro consequentemente na sua linha do SendMessage.

Coloca aqui o código do momento em que a aplicação recebe o wm_copydata!

Um abraço


GOSTEI 0
Willian

Willian

01/11/2005

O código que recebe a mensagem é:

procedure TForm1.WMCopyData(var Message: TWMCopyData);
var
   Dados            : TCopyDataStruct;
   ConteudoMensagem : PChar;
   Contador         : Integer;
   Mensagem         : String;
begin
   Dados := Message.CopyDataStruct^;
   ConteudoMensagem := Dados.lpData;
   Mensagem := ´´;

   Contador := 1;
   While ConteudoMensagem[Contador] <> 0 do
   Begin
      Mensagem := Mensagem + ConteudoMensagem[Contador];
      Contador := Contador + 1;
   End;

   ShowMessage(Mensagem);

end;


Sendo que a declaração ficou:

type
  TForm1 = class(TForm)
    procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;


Se puder me ajudar, agradeço desde já.

Valeu.


GOSTEI 0
Nildo

Nildo

01/11/2005

Faz assim: No [b:1180866547]dwData[/b:1180866547], passe o tamanho do texto que você quer passar. Daí na hora de ler, ao invez de usar um While para verificar o fim da String, copie exatamente os [b:1180866547]dwData[/b:1180866547] (como N) bytes recebidos pela mensagem. E remova a analogia do #0 para identificar o fim da string.


GOSTEI 0
POSTAR