Delphi中,怎样使用消息队列;怎样使用COM+消息组件。各位,拜托了,我十万火急。

解决方案 »

  1.   

    用Msmq发送blob型的数据
    procedure TForm1.Button9Click(Sender: TObject);
    var
    vZp:variant;
    strZp:string;
    olevZp:olevariant;
    begin
     adoquery1.Close;
     adoquery1.SQL.clear;
     adoquery1.SQL.Add('select bh,zp from g_zp where bh=741');
     adoquery1.Open;
    //从oracle 的long raw 类型的字段中取出.jpg型的照片数据
     strZp:=ADOQuery1.FieldByName('zp').asstring;
     vZp:=ADOQuery1.FieldByName('zp').value;
     olevZp:=ADOQuery1.FieldByName('zp').value;
     msmqqueueinfo1.PathName:='.\MYqueue';
     MSMQQueueInfo1.Label_:='Myqueue';
     msmqqueue1.ConnectTo(msmqqueueinfo1.Open(2,0));
    //将照片数据送如消息队列
     MSMQMessage1.Label_:='l_zp';
     MSMQMessage1.Body:=strzp;
     MSMQMessage1.Send(msmqqueue1.DefaultInterface);
     msmqqueue1.Close;end;
      

  2.   

    首先引入MSMQ的类型库,就会产生一些控件在Active里 发:
    procedure TForm1.Button1Click(Sender: TObject);var
      MSMQQInfo: Variant;
    begin  MSMQQInfo := CreateOleObject('MSMQ.MSMQQueueInfo');
      MSMQQInfo.PathName := '.\private$\Test';
      try
        MSMQQInfo.Create; //出错误提示信息
      except
      end;
      MSMQQueueInfo1.PathName := '.\private$\Test';
      MSMQQueueInfo1.Label_ :='ss';
      MSMQMessage1.Label_ := 'bb';
      MSMQMessage1.Body := 'kk';
      msmqqueue1.ConnectTo(MSMQQueueInfo1.Open(MQ_SEND_ACCESS, 0));
      MSMQMessage1.Send(MSMQQueueInfo1.Open(MQ_SEND_ACCESS, MQ_DENY_NONE));
    end;
    收:
    procedure TForm1.Button4Click(Sender: TObject);
    begin
      msmqqueueinfo1.PathName := '.\private$\Test'';
      msmqqueue1.Disconnect;
      msmqqueue1.ConnectTo(msmqqueueinfo1.Open(1, 0));
      msmqqueue1.EnableNotification(MSMQEvent1.DefaultInterface);
    end;处理:
    procedure TForm1.MSMQEvent1Arrived(Sender: TObject; var Queue: OleVariant;
      Cursor: Integer);
    var
      Msg: Variant;
      ss: string;begin
      Msg := Queue.Receive;
      ss:= Msg.body;
     //  处理程序
    end;