線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1755
推到 Plurk!
推到 Facebook!

如何攔截TClientSocket.Open()的ErrorEvent(or exception)?

尚未結案
Butch
一般會員


發表:4
回覆:3
積分:1
註冊:2004-10-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-23 17:26:01 IP:221.169.xxx.xxx 未訂閱
各位前輩: 小弟想要攔截TClientSocket.Open()的ErrorEvent(or exception) 以下是我的部分Code(簡單的測試): class TForm1 : public TForm { __published: TClientSocket *ClientSocket1; TButton *Button1; void __fastcall Button1Click(TObject *Sender); void __fastcall ClientSocket1Error(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent,int &ErrorCode); private: public: __fastcall TForm1(TComponent* Owner); }; ------------------------------------------------------------ void __fastcall TForm1::Button1Click(TObject *Sender) { try{ ClientSocket1->Open(); } catch(const ESocketError &e){ ShowMessage("Error 1"); } catch(const TSocketErrorEvent &e){ ShowMessage("Error 2"); } catch(const Exception &e){ ShowMessage("Error 3"); } catch(...){ ShowMessage("Error 0"); } return; } --------------------------------------------------------------- void __fastcall TForm1::ClientSocket1Error(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode) { switch(ErrorEvent){ case eeSend: ShowMessage("Send Error"); break; case eeReceive: ShowMessage("Recv Error"); break; case eeConnect: ShowMessage("Connect Error"); break; case eeDisconnect: ShowMessage("DisConnect Error"); break; case eeGeneral: ShowMessage("Unknow Error"); break; } ErrorCode = 0; } 不管我用...OnError Event or exception去攔截錯誤,我都攔不到,請問有什麼方法可以攔截到TClientSocket.Open()的失敗訊息呢....
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-24 15:34:45 IP:203.70.xxx.xxx 未訂閱
不會呀,我無論 try ... catch 來攔,或是在 OnError 攔都可以,會不會你是在 Debug Mode 下,因為在 Debug Mode 下發生 Exception 時 Debuger 會先攔截並且彈出 Exception Information Dialog,你在按一次 F9 跑過去,應該就會輪到你的 Error Handler。
Butch
一般會員


發表:4
回覆:3
積分:1
註冊:2004-10-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-24 16:22:19 IP:221.169.xxx.xxx 未訂閱
沒有啊...無論我如何測試...都無法用我的function去攔截到exception 再由一段>> //--------------------------------------------------------------------------- >> ---------- >>>> >>
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-24 16:44:49 IP:203.70.xxx.xxx 未訂閱
我想可能是你 ClientSocket 是 NonBlocking Mode,這是 async 的做法,所以你 ClientSocket1.Open 之後程式馬上就過去了,此時並不知道成功還失敗,須等到 callback event 回來才知道成功失敗,這時候程式早就離開你的 try ... catch 可控制範圍了,等到 callback event 回來,這時候只有整個程式最外圈的 try ... catch 才攔得到,但是我試過,不管 Blocking or NonBlocking 在 ClientSocket1Error 裡面都可以攔到,若你將 ErrorCode = 0 之後,就不會繼續 throw exception 給上一層。
pony0952
一般會員


發表:3
回覆:7
積分:2
註冊:2003-10-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-26 09:14:37 IP:61.220.xxx.xxx 未訂閱
我試了你的程式,我也沒有問題。 我猜想可能是你,環境參數設定有關,因為我之前也有發生這個的情形, 但由於我是胡亂設定的,因此不能確定是那一個設定項。 Pony
------
Pony
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-18 17:33:28 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-05 20:46:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!