日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

bcb 如何在DLL中捕捉系统级异常

發布時間:2024/9/5 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bcb 如何在DLL中捕捉系统级异常 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
bcb 如何在DLL中捕捉系統級異常

http://topic.csdn.net/t/20031023/09/2385627.html

--------------------------------------------------

我創建了一個動態庫,庫中實現了對Socket(TCP、UDP)的封裝,其中使用了BCB的TClientSocket,當使用該ClientSocket去連接一個并不存在的服務器時必然導致會ESocketError異常。
問題:我該如何捕捉到該異常?

如下代碼明顯不行,請哪位高手幫幫忙!!!!!!!!!!!!!
try
{
? ? ? ConnectServer();
}
catch(...)
{
? ? ? NULL;
}

?

回復于:2003-11-12 10:23:27

問題我已自己解決,本想早點上來跟大家討論討論,但....一拖就到了現在:(
現將自己在這方面的一點簡單的見解說出來,希望能給有需要的朋友一點提示。

1、在VCL中ESocketError異常未定義在EXCEPTION_EXECUTE_HANDLER框架中,所以try...catch(...)將不能對其捕捉。
2、但...TClientSocket的OnError事件對其異常進行了捕捉,所以可以通過處理OnError事件來處理該異常,并設置ErrorCode ? = ? 0,來返回異常標識EXCEPTION_EXECUTE_HANDLER,并完成處理
3、但...如果該TClientSocket類被動態創建并被封裝與線程之中并制成動態庫,重載OnError無效,無法捕捉異常(尚不明白為什么會這樣...如果對動態庫運作有認識的朋友不妨一起討論討論)。
4、不過,我們還是可以在線程起始或異常發生處使用結構性異常來定義捕捉該異常,如:
__try ? {...} ? __except(EXCEPTION_EXECUTE_HANDLER) ? {...}
5、其實上述的所有皆是對指定點進行異常捕捉,但是當異常通過了所有的捕捉(EXCEPTION_CONTINUE_SEARCH)時,將最終被定位在系 統未定義異常處理程序中(UnhandledExceptionFilter),即顯示異常對話框,這是我們的用戶所不愿看到的,你可使用 SetUnhandledExceptionFilter來定義自已未處理異常處理函數。這時所有的異常都在你的掌握之中了。
6、這里還有一種我們不推薦的做法,就是使用Win32提供的SetErrorModel函數并向它傳遞SEM_NOGPFAULTERRORBOX標識,此標識告訴進程遇到未處理異常時不再詢問直接中斷返回。
7、同樣的還有更改注冊表中的HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS ? NT\CURRENTVERSION\AEDEBUG中的Debugger中的數據等.

以上為未處理異常的一個大概的重點內容,有機會我將貼出我查閱的各部分關于異常的文章,希望起拋磚引玉之功效。以上皆是新手個人見解,如有不當還望高手指正。 posted on 2012-01-09 09:32 clq 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/-clq/archive/2012/01/09/2316799.html

總結

以上是生活随笔為你收集整理的bcb 如何在DLL中捕捉系统级异常的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。