我用vc6写了1个dll文件,然后在delphi7中进行调用,dll文件需要向主程序传送数据,都是字符串,我自己定义了1个消息,消息是WM_USER+1,请问大家,如何通过这个消息,把字符串数据传送给主程序,我的qq148085126,请大家帮助我,多谢了。

解决方案 »

  1.   

    发送const WM_MYMSG=WM_USER+1;var
     Atom:TAtom;
     S:ShortString;
    begin
     S:='aaabbbccc'+#0;
     Atom:=GlobalAddAtom(@S[1]);
     SendMessage(self.Handle, WM_MYMSG, 0, Atom);
      GlobalDeleteAtom(Atom);
    end;接收
    TForm1 = class(TForm)
    private
       procedure WMMyMsg(var Msg:TMessage);message WM_MYMSG;
    ...
    ...
    procedure TForm1.WMMyMsg(var Msg:TMessage);
    var
    buf:array[0..255]of char;
    begin
      GlobalGetAtomName(Msg.LParam,buf,sizeof(buf));
      showmessage(strpas(buf));
    end ;
      

  2.   

    我喜欢这样用,感觉优雅一些
    type PString=^String;
    var
      str:PString;
    begin
      New(str);
      str='test.........';
      SendMessage(self.Handle, WM_MYMSG, 0, Integer(@str)); 
    end;
    接收 
    TForm1 = class(TForm) 
    private 
      procedure WMMyMsg(var Msg:TMessage);message WM_MYMSG; 
    ... 
    ... 
    procedure TForm1.WMMyMsg(var Msg:TMessage); 
    var
      str:PString;
    begin
      str=Pointer(Msg.LParam);
      showmessage(str);
      dispose(str);//释放 
    end ; 
      

  3.   

    反正是进程内的,直接把地址传过去就可以了,用SendMessage同步调用。
    1、分配好空间
    2、填充好数据
    3、SendMessage用lParam把地址传过去
    4、把lParam强转回来
    5、使用该数据
    6、SendMessage返回
    7、释放分配的空间