刚从C转过来,真是郁闷!假设,我定义了一个结构体TRec.发消息时,我想将一个TRec变量a作为消息的lParam参数传递出去.收消息时,再从lParam参数获取变量a的相关数据.就像在C++中那样.请问: 该如何衬布

解决方案 »

  1.   

    eg.
    TCopyDataStruct = packed record
        dwData: DWORD;
        cbData: DWORD;
        lpData: Pointer;
    end; 
    procedure SendData(const copyDataStruct: TCopyDataStruct) ;
    var
      receiverHandle : THandle;
      res : integer;
    begin
      receiverHandle := FindWindow(PChar('TReceiverMainForm'),PChar('ReceiverMainForm')) ;
      if receiverHandle = 0 then
      begin
        ShowMessage('CopyData Receiver NOT found!') ;
        Exit;
      end;  res := SendMessage(receiverHandle, WM_COPYDATA, Integer(Handle), Integer(@copyDataStruct)) ;
    end;
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, SPComm, StdCtrls;
    Const
      WM_MSG=WM_USER+100;
    type
      PMyRec = ^MyRec;
      MyRec = Record
        id: integer;
        name: char;
      end;
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        procedure MyMessage(var   msg:TMessage);message WM_MSG;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.MyMessage(var msg: TMessage);
    var
      p: PMyRec;
    begin
      case msg.Msg of
        WM_MSG: begin
          p:= PMyRec(msg.lParam);
          showmessage(inttostr(p^.id));
        end;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      rec: MyRec;
    begin
      rec.id:=100;
      rec.name:='A';
      Sendmessage(handle,WM_MSG,0,Integer(@rec));
    end;end.