目前我的程序需要与外部程序通讯:
外部程序能够通过某种方式向我的程序发送字符串;我的程序处理后返回处理结果。
求思路,用com,消息还是什么。

解决方案 »

  1.   

    1)用消息+剪贴板
    2)用消息+原子(Atom)
      

  2.   

    方法很多啊Socket
    命名管道 CreateNamePipe + 事件
    叶面文件 MapViewOfFile + 事件
      

  3.   

    1、首先开辟一个共享内存
    2、程序中间发送是否有数据到代的自定义消息
    3、接收到消息后,读写内存注意:如果有需要,使用互斥对象对数据进行保护
    如果没有特别要求,最简单的实现思路是用WM_COPYDATA,其实微软对于WM_COPYDATA消息的实现机制也是基于内存共享的方式楼上说的其他方法都可以,各有各的优点和缺点。例如socket建立TCP/IP连接,数据是直接发送过去的,接收端需要使用线程轮询或者事件通知的方式接收处理数据,你无须负责共享内存的管理,但需要单独维护他们之间的通讯链路
    如果使用消息+××共享的方式,数据到代采用消息通知的方式,你只需要在得到消息后,从指定共享内存区域读取数据并处理,不需要维护连接。给你一个用WM_COPYDATA的例子发送端:
    unit SetForm;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      cpt : TCopyDataStruct;
      Findhd : THandle;
    begin
     //  ShowMessage(inttostr(length(Edit1.Text)));   Findhd := FindWindow(nil,pchar('GetCopyData'));
       if Findhd <> 0 then
       begin
          cpt.cbData := length(Edit1.Text)+1;
          GetMem(cpt.lpData,cpt.cbData);
          StrCopy(cpt.lpData,pchar(Edit1.Text));
          SendMessage(Findhd,WM_COPYDATA,Handle,Cardinal(@cpt));
          FreeMem(cpt.lpData);
       end else showmessage('没有找到目标窗口');end;end.接收端:
    unit Getdata;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
      private
        procedure MyCopyDataMessage(var msg : TWMCopyData);message wm_copydata;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.MyCopyDataMessage(var msg: TWMCopyData);
    beginEdit1.Text := StrPas(msg.CopyDataStruct^.lpData);
    end;end.
      

  4.   

    灵活运用Event和Shared Memory File是最好的