我试过WM_COPYDATA,但是只能传递字符串,结构体都没有成功过如果这个不行,还有什么好的方法么?我要的是传递结构,不要告诉我用Socket啊,就是不想用Socket

解决方案 »

  1.   

    Mailslot、File Mapping、Pipe、WM_COPYDATA
      

  2.   

    传递指针,应该可以的!!!
    WM_COPYDATA可以传递指针
      

  3.   

    我知道可以,问题我实现不了....
    有没有源代码?大家要看清楚我的帖子啊...不要贴一些简单的例子过来,我都看过了
    不管是File Mapping还是WM_COPYDATA,都是针对字符串的例子~~~~
      

  4.   

    //try测试如下代码,将Form1和Form2分别放在两个程序中测试~~
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm2 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure WMCOPYDATA(var Msg: TWMCOPYDATA); message WM_COPYDATA;
      end;var
      Form2: TForm2;implementation{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
    var
      vHandle: THandle;
      vCopyDataStruct: TCopyDataStruct;
      vRect: TRect;
    begin
      vHandle := FindWindow('TForm1', nil);
      vCopyDataStruct.dwData := SizeOf(vCopyDataStruct);
      vCopyDataStruct.cbData := SizeOf(vRect);
      vRect := BoundsRect;
      vCopyDataStruct.lpData := @vRect;
      SendMessage(vHandle, WM_COPYDATA, 0, Integer(@vCopyDataStruct));
    end;procedure TForm2.WMCOPYDATA(var Msg: TWMCOPYDATA);
    var
      vRect: TRect;
    begin
      //BoundsRect := PRect(Msg.CopyDataStruct^.lpData)^;
      //or
      Move(Msg.CopyDataStruct^.lpData^, vRect, SizeOf(vRect));
      BoundsRect := vRect;
    end;end.//....
    procedure TForm1.Button1Click(Sender: TObject);
    var
      vHandle: THandle;
      vCopyDataStruct: TCopyDataStruct;
      vRect: TRect;
    begin
      vHandle := FindWindow('TForm2', nil);
      if vHandle = 0 then Exit;
      vCopyDataStruct.dwData := SizeOf(vCopyDataStruct);
      vCopyDataStruct.cbData := SizeOf(vRect);
      vRect := BoundsRect;
      vCopyDataStruct.lpData := @vRect;
      SendMessage(vHandle, WM_COPYDATA, 0, Integer(@vCopyDataStruct));
    end;procedure TForm1.WMCOPYDATA(var Msg: TWMCOPYDATA);
    var
      vRect: TRect;
    begin
    //  BoundsRect := PRect(Msg.CopyDataStruct^.lpData)^;
    //  or
      Move(Msg.CopyDataStruct^.lpData^, vRect, SizeOf(vRect));
      BoundsRect := vRect;
    end;
    //....
      

  5.   

    zswangII(伴水清清)(职业清洁工) 
    如果我把Rect换成一个结构
    Type tempstru=record
        str:string;
        i:integer;
        str2:string;
    end;
    要怎么做呢?
    不知道你的Rect例子测试过没有。我刚才测试了一下tempstru这个结构,不行
      

  6.   

    老大~~
    string是一个指针,存储空间是不定的~~你传给其他程序string有什么用?它只是四个字节~~
    如下结构都行~~type tempstru=record
        str: ShortString;
        i: integer;
        str2: ShortString;
    end;type tempstru=record
        str: string[20];
        i: integer;
        str2: string[20];
    end;type tempstru=record
        str: array[0..19] of Char;
        i: integer;
        str2: array[0..19] of Char;
    end;
      

  7.   

    不好意思,zswangII(伴水清清)(职业清洁工) ,还是十分谢谢你 :)
    因为我用你传Rect结构的方法,来测试包含String类型的结构时,失败了你能帮我弄一个简单的例子吗?我就是要传递包含String的结构给另一个程序啊或者说,一个包含任何多个数据类型的结构,如何传递呢?
    我总是取不到值