社区
网络及通讯开发
帖子详情
Help: 如何在DLL中捕捉系统级异常
hswu
2003-10-23 09:48:30
我创建了一个动态库,库中实现了对Socket(TCP、UDP)的封装,其中使用了BCB的TClientSocket,当使用该ClientSocket去连接一个并不存在的服务器时必然导致会ESocketError异常。
问题:我该如何捕捉到该异常?
如下代码明显不行,请哪位高手帮帮忙!!!!!!!!!!!!!
try
{
ConnectServer();
}
catch(...)
{
NULL;
}
...全文
145
6
打赏
收藏
Help: 如何在DLL中捕捉系统级异常
我创建了一个动态库,库中实现了对Socket(TCP、UDP)的封装,其中使用了BCB的TClientSocket,当使用该ClientSocket去连接一个并不存在的服务器时必然导致会ESocketError异常。 问题:我该如何捕捉到该异常? 如下代码明显不行,请哪位高手帮帮忙!!!!!!!!!!!!! try { ConnectServer(); } catch(...) { NULL; }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hswu
2003-11-12
打赏
举报
回复
问题我已自己解决,本想早点上来跟大家讨论讨论,但....一拖就到了现在:(
现将自己在这方面的一点简单的见解说出来,希望能给有需要的朋友一点提示。
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中的数据等.
以上为未处理异常的一个大概的重点内容,有机会我将贴出我查阅的各部分关于异常的文章,希望起抛砖引玉之功效。以上皆是新手个人见解,如有不当还望高手指正。
hswu
2003-10-23
打赏
举报
回复
sorry, 我发现了另一个问题,就是当该程序不是以动态库形式导出时,这个异常是可以捕捉,但编制成动态库后,我跟踪动态库,就发现该异常并没有被捕捉。
注:使用与不使用动态库都使用同一代码文件,所有不存在程序不同的情况。
问:谁知道为什么我在程序中能捕捉的异常做成DLL后就不能被捕捉了???
hswu
2003-10-23
打赏
举报
回复
补充一下,该Socket使用阻塞式连接,且被封装在一个独立的线程中。
还有人帮我吗?给点提示也好:)
hswu
2003-10-23
打赏
举报
回复
sorry, 我忘了说了,我还重载了OnError事件,在这个事件中我置ErrorCode=0; 结果还是出错
同时我想问一下谁对SetUnhandledExceptionFilter这个函数有较深的了解,能详细解释一下吗?
ljianq
2003-10-23
打赏
举报
回复
使用TClientSocket的OnError事件试试看。
fjye
2003-10-23
打赏
举报
回复
关注,我也很想知道怎么解决
Linux
系统
常用内置命令
Re: 《Linux
系统
常用内置命令》 < Series 12. ><linux核心命令系列 ... 《参透 VMware 桌面
级
虚拟化》 《在虚拟机
中
安装模版机(包括应用软件等)》 《SecureCRT 连接 GNS3/Linux 的安全精密工具》
(Windbg调试一)minidump崩溃
捕捉
(Windbg调试四)dump崩溃
捕捉
一,
系统
的
异常
处理顺序二,SetUnhandleExceptionFilter函数三,Minidump四...但是在使用我们软件的用户环境上,没有编译器帮我们处理这个
异常
,操作
系统
会使用它的
异常
处理机制:弹出...
深入研究 Win32 结构化
异常
处理
本文关键字:SEH, Windows, VisualC... Matt Pietrek 著 董岩 译 Victor 转载自 Xfocus 并整理 在所有 Win32 操作
系统
提供的机制
中
,使用最广泛的未公开的机制恐怕就要数结构化
异常
处理
C#.Net应用程序
异常
处理
在Program.cs文件的static void Main()
中
,修改如下: static void Main() { try { //设置应用程序处理
异常
方式:ThreadException处理 Application.
Jprofiler V14
中
文使用文档
在开发
中
你可以使用它,用于质量保证,也可以解决你的生产
系统
遇到的问题。方法调用这通常被称为"CPU分析"。方法调用可以通过不同的方式进行测量和可视化, 分析方法调用可以帮助了解你的应用程序正在做什么,并找到...
网络及通讯开发
1,316
社区成员
8,873
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章