首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何隔离第三方组件的崩溃

如何隔离第三方组件的崩溃

作者头像
gaigai
发布2019-09-10 16:43:36
8210
发布2019-09-10 16:43:36
举报
文章被收录于专栏:Windows开发Windows开发Windows开发

在引入第三方组件的时候,如果其稳定性不够偶尔会崩溃,如何将它进行隔离使得其崩溃不会影响主程序崩溃呢?

主要有两个方法:

第一, 调用第三方组件的每个接口进行异常捕获。

第二, 独立进程加载调用第三方组件。

调用第三方组件的每个接口进行异常捕获时,将调用代码放在__try代码块内,filter-expression指定EXCEPTION_EXECUTE_HANDLER,如果第三方组件崩溃被捕获就认为调用失败,功能无法正常使用,但是主程序不会崩溃。

__try
{
    // guarded body of code  
}
__except(filter-expression)
{
    // exception-handler block  
}

第三方组件有可能在DLL加载过程中崩溃,需要使用LoadLibrary()动态加载DLL,将LoadLibrary()代码放在__try代码块内。如果DLL使用静态链接时操作系统负责加载DLL,那是无法捕获到异常。

如果第三方组件内部崩溃不是由于主程序调用接口的过程中产生的,而是内部产生(比如内部线程代码触发)就得使用第二种方法。

独立进程加载调用第三方组件,由于第三方组件运行在独立进程,独立进程崩溃不会影响主程序的进程崩溃。独立进程实现比较复杂,包括进程启动结束、进程间通信,通信协议定义。

Windows进程间通信的主要方式包括:

第一, 使用WM_COPYDATA消息

第二, 使用管道

第三, 使用本地socket

如果懂得COM组件开发,将第三方组件封装成COM组件给主程序调用是很好的解决方案,COM组件无需考虑进程启动结束、进程间通信,通信协议定义等细节。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Windows开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档