Komunikaty wysłane z DLLki i Paramy...

0

Witam!

Mam dziwny problem...

Wysyłam sobie z DLLki taki komunikat:

SendMessage(H, BM_SOCKET_READ, integer(@RT), 0);

to jest moj komunikat, WM_USER + 153

problem jest taki, że gdy kiedy aplikacja odbiera komunikat wyslany z biblioteki to ten WParam jest 0, sprawdzilem ze gdy wysylam go z dllki jest dobra wartosc inna niz 0

PostMessage czy Send zadna roznica

H (Handle) jest dobry bo aplikacja dostaje komunikat...

dla testu wpisalam w LParam 666 i tez aplikacja odczytala 0...

Pozdrawiam!
Endrju.

0

Biblioteka:

library Project2;

uses
  Windows,
  Messages;

{$R *.res}

const
  WM_KOMUNIKAT = WM_USER + 4321;

var
  Handle : HWND;

procedure GetMyHandle(H : HWND);
begin
  Handle := H;
end;

procedure SendMyMessage;
begin
  PostMessage(Handle, WM_KOMUNIKAT, 2222, 0);
end;

exports
  GetMyHandle,
  SendMyMessage;

begin
end.

Aplikacja:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
  WM_KOMUNIKAT = WM_USER + 4321;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure Komunikat(var Msg: TMessage); message WM_KOMUNIKAT;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure GetMyHandle(H : HWND); external 'Project2.dll' name 'GetMyHandle';
procedure SendMyMessage; external 'Project2.dll' name 'SendMyMessage';

procedure TForm1.Button1Click(Sender: TObject);
begin
  PostMessage(Handle, WM_KOMUNIKAT, 1111, 0);
end;

procedure TForm1.Komunikat(var Msg: TMessage);
begin
  ShowMessage(IntToStr(Msg.WParam));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  GetMyHandle(Handle);
  SendMyMessage;
end;

end.

Po kliknieciu na Button2 wykonuje sie poprawnie procedura komunikat (pokazuje 2222). Coś musiałeś przekombinować po drodze.

0

hmm... cos to natworzyl? ;)

const
 BM_SOCKET_READ =  WM_USER + 154;

var
  RT: String; 
  H: THandle; 
Begin
  RT:= Socket.ReceiveText;
  H:= FindWindow(nil, 'xxx'); //zamiast xxx mam odpowiedi caption to jest dobrze 
  SendMessage(H, BM_SOCKET_READ, integer(@RT), 0);
end;  

ten kod mam w bibliotece DLL no i jak odbieram ten komunikat w programie (a sie odbiera bo czesc dziala) to tlyko paramy są puste...

(ale kodzik Twoj zanalizuje moze sie przydac, dzieki :) :D)

0

Bo string juz jest wskaznikiem (o ile nie ustawiony kompilator na starego stringa)

i powinienes go tak czytac
............ String(Pointer(M.wparam)^) ................

albo usunac zbedna malpe
var
RT:String;

...........integer(RT).................

1 użytkowników online, w tym zalogowanych: 0, gości: 1