在组态运行时捕获ActiveX控件异常的系统和方法_3

文档序号:9235372阅读:来源:国知局
16]
[0117] 打开画面和关闭画面的异常处理机制是,在组态的化eateWnd方法和DestroyWnd 方法中,分别加上SException异常的捕获及处理。
[0118] 定时异常处理的机制是,重载应用类的虚函数PumpMessage,按如下方法实现:
[0119]
[012。 方法调用异常处理的机制是,重载视图中的WindowProc方法,按照如下代码实 现:
[012引 LRESULT CMyView::WindowProc(UINT message, WPARAM wParam, LPARAM IParam)
[0123]
[0125] 步骤二、编写一个测试ActiveX控件,名称为TestActiveX,在TestActiveX中,实 现一个空的定时任务,即定时任务中不做任何操作。
[0126] 步骤H、包j建一个组态画面,名称为TestActiveXPage。在该页面中,添加控件 TestActiveX,然后保存画面。
[0127] 步骤四、修改控件TestActiveX的初始化方法,直接对空内存赋值,使之报异常, 代码如下:
[0128] Qia;r*p=NtXL;
[0129] Strcp5f(p, "test");
[0130] 步骤五、重新打开画面TestActiveXPage,可W看到该异常被捕获,并弹出了提示 信息。
[0131] 步骤六、恢复TestActiveX控件的初始化方法,将步骤四中的异常代码移到定时 任务中。
[0132] 步骤走、重新打开画面TestActiveXPage (本实施例屏蔽了定时异常提示),检查日 志文件,W将定时异常被捕获并记录。
[0133] 步骤八、恢复TestActiveX控件的定时任务,为控件添加一个方法TestMethod,将 步骤四中的异常代码移到方法TestMethod中;在控件TestActiveX的退出方法中,也拷贝 一段步骤四中的异常代码,使控件退出时发生异常。在组态页面TestActiveXPage中添加 一个"测试"按钮,在组态脚本中响应该按钮的化Click消息并调用控件TestActiveX的方 法 TestMethod。
[0134] 步骤九、重新打开趣面TestActiveXPage,点击"测试"按钮(可W多次点击),然后 退出组态,关闭画面TestActiveXPage。检查日志文件,W将调用控件方法引发的异常及退 出时引发的异常均被捕获并记录。
[0135] 上述实例,可W很明显的看到本发明应用在组态中的优势。
[0136]为满足复杂的客户端展示需求,在绝大部分监控软件的组态系统中都提供了嵌入ActiveX控件的功能,可W嵌入自己开发或第H方的各类ActiveX控件。系统运行中任何一 个控件发生异常,就会导致整个系统崩溃,影响产品稳定性和口碑。由于无法强制要求所有 的控件自己处理异常,尤其是第H方控件。在组态系统中,屏蔽控件异常对组态系统正常运 行的影响,保持系统的持续运行稳定性变得尤为重要。应用本发明,除了可W提高系统的长 期运行稳定性,还可W提高异常定位的速度。
[0137] W上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述 特定实施方式,本领域技术人员可W在权利要求的范围内做出各种变形或修改,该并不影 响本发明的实质内容。
【主权项】
1. 一种在组态运行时捕获ActiveX控件异常的系统,其特征在于,包括如下装置: 组态系统,用于组态页面的展示,ActiveX控件作为一个画面元素嵌入到组态页面中; 组态系统异常管理模块,用于将所有的系统可能抛出的异常映射成组态系统自定义的 一个异常类型,当系统抛出异常时,转换成该自定义的异常类型进行处理; 组态异常处理模块,用于在组态系统进程的消息链中嵌入异常捕获机制,负责捕获并 处理ActiveX控件中进行消息处理时引发的异常; 进一步地,所述组态系统,在加载每个ActiveX控件时,在组态页面中自动创建一个 ActiveX容器,在ActiveX容器中创建ActiveX控件,由该ActiveX容器负责捕获并处理 ActiveX控件加载和卸载时引发的异常; 所述组态异常处理模块,在组态系统进程调用ActiveX控件方法的触发机制中嵌入异 常捕获机制,负责捕获并处理ActiveX控件方法被组态系统调用时引发的异常。2. 根据权利要求1所述的在组态运行时捕获ActiveX控件异常的系统,其特征在于,所 述ActiveX容器在卸载AcitveX控件时,首先ActiveX容器去卸载其加载的ActiveX控件, 如果在ActiveX卸载时发生异常,ActiveX容器会捕获到异常并进行处理。3. 根据权利要求1所述的在组态运行时捕获ActiveX控件异常的系统,其特征在于,所 述在组态系统进程的消息链中嵌入异常捕获机制,具体为:先截获消息,并传递给后续处理 环节,在后续处理环节中发生的系统异常,被映射成组态系统自定义异常类型,被异常捕获 机制捕获并处理。4. 根据权利要求1所述的在组态运行时捕获ActiveX控件异常的系统,其特征在于,所 述在组态系统进程调用ActiveX控件方法的触发机制中嵌入异常捕获机制,具体为:先截 获ActiveX控件方法调用的消息,并传递给实际被调用的ActiveX控件,在ActiveX空间方 法调用中发生的异常,被映射成组态系统自定义异常类型,被异常捕获机制捕获并处理。5. 根据权利要求1所述的在组态运行时捕获ActiveX控件异常的系统,其特征在于,打 开画面异常的处理流程具体如下: a) 接收用户打开画面文件的指令; b) 开始逐个读取画面对象,逐个创建; c) 若对象是普通对象,则按照普通对象处理,直接创建到组态画面中; d) 若对象是ActiveX控件,贝U为该ActiveX控件自动创建一个ActiveX容器,并启动 ActiveX创建异常处理; e) 在ActiveX容器中创建真正的ActiveX控件; f) 若创建ActiveX控件时发生异常,ActiveX容器捕获到该异常,弹出提示信息给用 户,结束画面创建,关闭该画面; g) 若控件创建无异常,继续读取、创建其它对象,直到所有对象创建完毕;然后开始画 面运行。6. 根据权利要求1所述的在组态运行时捕获ActiveX控件异常的系统,其特征在于,关 闭画面的异常处理流程具体如下: a) 接收用户关闭某一画面的指令; b) 开始卸载画面对象,若是普通对象,则按照普通对象的卸载机制卸载; c) 若是ActiveX控件,则启动ActiveX控件卸载异常处理; d) 开始卸载ActiveX控件,若发生异常,则记录日志,然后卸载ActiveX容器;若无异 常,则直接卸载ActiveX容器; e) 继续其它对象的卸载,直到所有对象卸载完毕,关闭组态画面。7. 根据权利要求1所述的在组态运行时捕获ActiveX控件异常的系统,其特征在于,定 时的异常处理流程具体如下: a) 组态应用启动组态画面运行; b) 检测是否包含了 ActiveX控件,所包含的ActiveX控件是否启动了定时任务; c) 若无ActiveX控件的定时任务,则按照正常逻辑运行画面; d) 若包含了 ActiveX控件的定时任务,则启动ActiveX定时异常处理; e) 检测ActiveX定时异常处理,是否发生异常; f) 若发生了异常,首先记录日志,然后弹出提示框给用户,征求用户的意见,是否要关 闭定时器;若用户选择了关闭定时器,则关闭该ActiveX控件的定时任务,若用户选择继续 运行,则不关闭定时器,继续对定时任务进行异常捕获; g) 关闭页面时卸载ActiveX定时异常处理。8. 根据权利要求1所述的在组态运行时捕获ActiveX控件异常的系统,其特征在于,方 法调用的异常处理流程具体如下: a) 组态应用启动组态画面运行; b) 检测是否包含了 ActiveX控件,检测组态画面是否通过脚本调用了 ActiveX控件的 方法或设置了 ActiveX控件的某些属性; c) 若没有调用ActiveX控件的方法或设置ActiveX控件的属性,则按照正常逻辑运行 画面; d) 若调用了 ActiveX控件的方法或设置了 ActiveX控件的某些属性,贝U启动ActiveX 方法调用异常处理; e) 检测通过脚本调用ActiveX控件的方法是否发生异常; f) 若发生了异常,则记录日志,之后继续对ActiveX控件的方法调用进行异常捕获; g) 关闭页面时卸载ActiveX控件方法调用异常处理。9. 一种在组态运行时捕获ActiveX控件异常的方法,其特征在于,利用权利要求1至8 中任一项所述的在组态运行时捕获ActiveX控件异常的系统,来捕获ActiveX控件异常。
【专利摘要】本发明提供了一种在组态运行时捕获ActiveX控件异常的系统,包括组态系统、组态系统异常管理模块、组态异常处理模块。本发明可以捕获到嵌入到组态中的ActiveX控件发生的异常,并对异常进行处理,保证组态页面中其它项的正常运行。本发明保证了嵌入系统中的任何一个ActiveX控件出错时不会对系统造成不可预料的错误。完全避免数据丢失、中断控制过程以及由此所造成的损失。在任何需要嵌入ActiveX控件的产品或项目中,都可以应用本发明的成果。
【IPC分类】G06F11/36
【公开号】CN104951394
【申请号】CN201410116418
【发明人】朱从锋, 李晓浩, 顾慧, 范昀, 冯隽永, 吴晓宁
【申请人】上海宝信软件股份有限公司
【公开日】2015年9月30日
【申请日】2014年3月26日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1