在引入第三方组件的时候,如果其稳定性不够偶尔会崩溃,如何将它进行隔离使得其崩溃不会影响主程序崩溃呢?
主要有两个方法:
第一, 调用第三方组件的每个接口进行异常捕获。
第二, 独立进程加载调用第三方组件。
调用第三方组件的每个接口进行异常捕获时,将调用代码放在__try代码块内,filter-expression指定EXCEPTION_EXECUTE_HANDLER,如果第三方组件崩溃被捕获就认为调用失败,功能无法正常使用,但是主程序不会崩溃。
代码语言:javascript复制__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组件无需考虑进程启动结束、进程间通信,通信协议定义等细节。