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中的数据等.
以上为未处理异常的一个大概的重点内容,有机会我将贴出我查阅的各部分关于异常的文章,希望起抛砖引玉之功效。以上皆是新手个人见解,如有不当还望高手指正。
http://www.cnblogs.com/-clq/archive/2012/01/09/2316799.html
bcb 如何在DLL中捕捉系统级异常的更多相关文章
- BCB怎么调用DLL中的函数
推荐你看<BCB编写DLL终极手册>这篇文章如下片段:二. 静态调用 DLL使用 $BCB path\Bin\implib.exe 生成 Lib 文件,加入到工程文件中将该文件拷贝到当前目 ...
- 如何在TFS中恢复系统默认查询”已指派给我”的设置(TFS 2013)
故事是这样开始的,一天开发人员求助说,在浏览器中修改了系统默认的工作项查询"已指派给我"的后,发现这个查询每次都提示超时,并且没有办法恢复到初始的设置状态,因为出现超时提示以后,查 ...
- 如何在C#中自定义自己的异常
在C#中所有的异常类型都继承自System.Exception,也就是说,System.Exception是所有异常类的基类. 总起来说,其派生类分为两种:1. SystemException类: 所 ...
- Win32 DLL和MFC DLL 中封装对话框
现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题.这里我们从Win32 DLL和MFC DLL两个方面来分析并解决这个问题. ...
- WPF界面开发技巧大放送!DevExpress WPF在TreeListView中扩展N级
DevExpress广泛应用于ECM企业内容管理. 成本管控.进程监督.生产调度,在企业/政务信息化管理中占据一席重要之地.通过DevExpress WPF Controls,您能创建有着强大互动功能 ...
- [转]如何在Java中调用DLL方法
转载地址:http://developer.51cto.com/art/200906/129773.htm Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台 ...
- 解决 “MoveFile”: 类型库“XXX.dll”中的标识符已经是宏;使用“rename”限定符 类型库符号与系统符号冲突问题
今天在VS工程当中引入一个组件,编译的时候出现警告, “MoveFile”: 类型库“XXX.dll”中的标识符已经是宏:使用“rename”限定符.虽然只是一个警告,但看着实在不爽,更重要的是,警告 ...
- 如何在VMware中安装Linux系统
这篇文章主要讲述如何在VMware12中安装RHEL6.9Linux操作系统 步骤一: 打开VMware软件,在主页中点击创建新的虚拟机或者点击左上角文件,在列表中点击新建虚拟机,如图: 步骤二: 点 ...
- 如何在C#中引入CPLEX的dll(CPLEX系列-教程一)
以前写在CSDN上的文章.转到博客园之后,打算把这个教程移过来,顺便完善后面的教程.主要是在Asp.Net+EF6里面使用cplex,完成一个最优生产计划的决策.当时在查找如何在C#中引用cplex时 ...
随机推荐
- windows server 许可port或执行技巧
底:于windows serverserver于,部署应用程序,例如http当协议应用,当外网通http协议来访问网页,我们需要得到server入境许可,在访问者的浏览器网页内容足够的天赋正常显示,除 ...
- java几种字符串反转
java实现的字符串翻转,能想到的这几种方法 假设有其它方法,欢迎交流 //字符串反转 public class ReverseString { public String reverse1(Stri ...
- eclipse 上安装systemgui
http://wiki.eclipse.org/Linux_Tools_Project/PluginInstallHelp http://wiki.eclipse.org/Linux_Tools_Pr ...
- systemTAP 学习
http://blog.csdn.net/moonvs2010/article/category/1570309
- 初步掌握Yarn的架构及原理
1.YARN 是什么? 从业界使用分布式系统的变化趋势和 hadoop 框架的长远发展来看,MapReduce的 JobTracker/TaskTracker 机制需要大规模的调整来修复它在可扩展性, ...
- iOS-UITableCell详情
iOS-UITableCell详情 表示UITableViewCell风格的常量有: UITableViewCellStyleDefault UITableViewCellStyleSubtitle ...
- 学习微信小程序之css15解决父盒子高度塌陷
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HTML的Get方法URL传递中文参数,解决乱码问题
本例中有使用JQuery. 资料参考:http://www.cnblogs.com/babycool/p/3169058.html 发送的HTML页面代码: <!DOCTYPE html> ...
- bootstrap01登录小例子
引入需要的bootstrap文件 <!DOCTYPE html> <html> <head lang="en"> <meta charse ...
- JavaSE、JavaEE、JavaME三者的区别
1. Java SE(Java Platform,Standard Edition). Java SE 以前称为 J2SE. 它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应 ...