全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3396
推到 Plurk!
推到 Facebook!

如何在BCB 中使用MSMQ

 
dhchang
一般會員


發表:7
回覆:9
積分:8
註冊:2003-05-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-15 13:51:51 IP:61.30.xxx.xxx 未訂閱
將MSMQ import 到 BCB 後 拖曳兩個MSMQQueueInfo , 兩個MSMQQueue , 一個MSMQEvent , 一個MSMQMessage    還有很大的改良空間 , 分享給有需要的人參考     
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
IMSMQQueue2Ptr IMSMQQ;
Variant aa;
MSMQQueueInfo1->set_PathName(L".\\private$\\T3");
MSMQQueueInfo1->set_Label(L".\\private$\\T3");
MSMQQueueInfo1->Create();
IMSMQQ = MSMQQueueInfo1->Open(MQ_SEND_ACCESS ,MQ_DENY_NONE);
MSMQQueue1->ConnectTo(IMSMQQ);
aa = "a";
MSMQMessage1->set_Body(aa);
MSMQMessage1->Send(IMSMQQ);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
IMSMQQueue2Ptr IMSMQQ;
IMSMQMessage2Ptr IMSMQMsg;
Variant aa;
MSMQQueueInfo1->set_PathName(L".\\private$\\T3");
MSMQQueueInfo1->set_Label(L".\\private$\\T3");
IMSMQQ = MSMQQueueInfo1->Open(MQ_RECEIVE_ACCESS  ,MQ_DENY_NONE);
MSMQQueue1->ConnectTo(IMSMQQ);
IMSMQMsg = IMSMQQ->Receive();
MSMQMessage1->ConnectTo(IMSMQMsg);
aa = MSMQMessage1->get_Body();
Label1->Caption = aa;
}
//---------------------------------------------------------------------------    void __fastcall TForm1::MSMQEvent1Arrived(TObject *Sender,
      LPDISPATCH Queue, long Cursor)
{
IMSMQQueue2Ptr IMSMQQ;
IMSMQMessage2Ptr IMSMQMsg;
Variant aa;
IMSMQQ= Queue ;
MSMQQueue1->ConnectTo(IMSMQQ);
IMSMQMsg = IMSMQQ->Receive();
MSMQMessage1->ConnectTo(IMSMQMsg);
aa = MSMQMessage1->get_Body();
Label2->Caption = aa;
MSMQQueue2->EnableNotification(MSMQEvent1->GetDefaultInterface());
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button3Click(TObject *Sender)
{
IMSMQQueue2Ptr IMSMQQ;
IMSMQMessage2Ptr IMSMQMsg;
IMSMQEvent2Ptr IMSMQE;
Variant aa;
MSMQQueueInfo2->set_PathName(L".\\private$\\T3");
MSMQQueueInfo2->set_Label(L".\\private$\\T3");
IMSMQQ = MSMQQueueInfo2->Open(MQ_RECEIVE_ACCESS  ,MQ_DENY_NONE);
MSMQQueue2->ConnectTo(IMSMQQ);
MSMQQueue2->EnableNotification(MSMQEvent1->GetDefaultInterface());    }
//---------------------------------------------------------------------------    
發表人 - dhchang 於 2004/07/15 13:58:08
bytecode
一般會員


發表:2
回覆:12
積分:2
註冊:2003-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-16 13:35:53 IP:211.22.xxx.xxx 未訂閱
謝謝您的分享!是不是能提供 BCB 如何import MSMQ 的詳細步驟!!
bytecode
一般會員


發表:2
回覆:12
積分:2
註冊:2003-08-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-16 13:39:15 IP:211.22.xxx.xxx 未訂閱
您好~~是否能提供 BCB 如何import MSMQ 的詳細步驟.我已閱讀過本論壇其他有關此主題的文章,但皆無較完整的描述,是否可麻煩您作一個較完整的說明.謝謝!!
dhchang
一般會員


發表:7
回覆:9
積分:8
註冊:2003-05-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-19 13:21:38 IP:61.30.xxx.xxx 未訂閱
我是這樣做的 1.選取 Project \Import Type Library 2. 選取 Microsoft Message ... 3. Install MSMQ 需要先安裝
bytecode
一般會員


發表:2
回覆:12
積分:2
註冊:2003-08-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-20 15:08:28 IP:211.22.xxx.xxx 未訂閱
謝謝您!已經得到解答了,不過在您的程式碼片段中發現此敘述 "IMSMQQ= Queue ;" 是不是有筆誤?
dhchang
一般會員


發表:7
回覆:9
積分:8
註冊:2003-05-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-22 13:22:19 IP:61.30.xxx.xxx 未訂閱
Bytecode 你好, "IMSMQQ= Queue"不是筆誤, Queue 是從eventarrived 傳過來的
bytecode
一般會員


發表:2
回覆:12
積分:2
註冊:2003-08-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-23 13:32:00 IP:211.22.xxx.xxx 未訂閱
是的!我忽略了該函式的參數,謝謝指正~不知dhchang是否有關於MSMQ Trigger的用法可供參考~~謝謝
bytecode
一般會員


發表:2
回覆:12
積分:2
註冊:2003-08-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-23 15:27:07 IP:211.22.xxx.xxx 未訂閱
對不起!上述的程式執行到 Button1Click 後,出現 "找不到指定的模組" 錯誤訊息,應該如何解決?謝謝您的熱心幫助.
dhchang
一般會員


發表:7
回覆:9
積分:8
註冊:2003-05-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-07-23 17:40:13 IP:61.30.xxx.xxx 未訂閱
Bytecode 你好, 你提到的Trigger 是指Queue 收到東西後要自動Trigger event 嗎? 如果是, 目前的code 應該可以滿足你 如果不是, 可不可以解釋一下 "模組找不到"我沒遇到, 你要不要試試單步執行, 看問題出現在哪一行 發表人 - dhchang 於 2004/07/23 17:42:02
bytecode
一般會員


發表:2
回覆:12
積分:2
註冊:2003-08-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-07-26 10:46:54 IP:211.22.xxx.xxx 未訂閱
再次謝謝您的回答! 1)首先關於找不到模組部份,我想是否因為肇因於MSMQ的版本問題,因程式碼中有一個宣告IMSMQQueue2Ptr,故猜想是否要使用MSMQ 2.0?果然在安裝了MSMQ 2.0的機器上便可執行無誤.但是從中卻發現了另一個問題---同樣安裝Window XP的兩部機器,第一部為MSMQ 2.0,第二部則有MSMQ 1.0及3.0 獨缺MSMQ2.0,索性在第二部機器上重新安裝MSMQ,但在BCB IDE內重新Import Type Library MSMQ 2.0 Object 時有"A class named TMSMQuery is already installed" 的錯誤,應是 沒有移除註冊的問題,但我要如何得知要 unregister 哪些DLL/OCX 呢? 2)我所提的Trigger是系統服務中的觸發程序,某種程度上您的Event亦可達到相同的功能,在此先謝謝了.(http://www.microsoft.com/windows2000/technologies/communications/msmq/triggers_using.asp) 3)另有關於MSMQ應是個滿複雜的架構,是否可告知哪裡有關於您所分享的MSMQ COM介面用法的參考文件可供參考?
bytecode
一般會員


發表:2
回覆:12
積分:2
註冊:2003-08-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-08-02 17:44:43 IP:211.22.xxx.xxx 未訂閱
對不起!請再接受我的另一個問題 為什麼 set_PathName 和 set_Label 採用同樣的參數?使用您的程式碼並無法設定送到MSMQ的訊息標籤(Label).我也嘗試使用MSMQMessage的set_Label method去設定Label,但無法成功.承蒙指教,無任感激.
dhchang
一般會員


發表:7
回覆:9
積分:8
註冊:2003-05-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-08-04 12:34:17 IP:61.30.xxx.xxx 未訂閱
Bytecode 你好, 關於XP UnRegister , 我沒遇過, 建議另闢問題, 尋求有經驗的前輩協助 PathName 與 LabelName 不需要設定成一樣也可以RUN , 至於LabelName 看不到, 我沒遇過, 所以也無法提供建議 MSMQ 的用法我是參考本站delphi 版本及 MSDN 我是使用 win2000 SP4 , XP 下的疑問我提不出建議 , 不好意思 發表人 - dhchang 於 2004/08/04 12:38:21
系統時間:2024-05-15 2:06:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!