【Halcon教程6】halcon/c++接口基础 之异常处理
来源:互联网 发布:淘宝十元包邮专区在哪 编辑:程序博客网 时间:2024/06/05 07:30
关于运行错误,HALCON/C++默认打印错误信息并且终止程序。然而在某些应用中,放宽这个法则可能更有用。比如,如果一个应用要求用户交互式地指定一个图像文件读取,如果因为用户不能拼错文件名而终止程序的话,会很不方便。因此,HALCON/C++允许集成你自己的错误处理代码。如下的章节将分别介绍面向对象的方法和面向过程的方法。
面向对象的方法
如果一个运行错误发生在面向对象的调用中,类HException的实例将会创建。(图5.8为类的定义)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
Figure 5.8: Part of the declaration of the class HException.
以上这个例子,包含了错误的所有信息。其中一个异常重要的成员如下:
- line:错误发生的项目行号
- file:错误发生的文件名
- proc:实际的HALCON算子的名字
- err: 错误代号,see below
- message: 错误文本
当发生后,HException的对象被传递到所谓的异常句柄。HALCON的默认异常句柄将打印对应的错误信息,并且终止程序。
作为另一种可替代的方法,你可以实现和使用你自己的异常处理。为了作为HALCON exception handler,一个程序必须有如下的签名:
- 1
然后通过HException的方法InstallHHandler安装你的异常处理程序。(见图5.8)这样一旦发生了运行错误,HALCON然后调用你自己的程序,传递实际的异常的对象作为参数。
如下的例子将展示如何使用一个用户指定的异常处理器和标准的C++异常处理机制(try catch)一起使用.对应的项目example_errorhandle.cpp可以在%HALCONEXAMPLES%\cpp的子目录找到。它实现了以上指定的目的:你可以键入一个文件名去读取;如果文件不存在,项目将打印一个对应的信息但不会停止程序,而是继续运行。
项目的开始,一个用户指定的异常处理器使用如下的方法安装:
- 1
被安装的程序简单地调用C++的异常处理机制throw:
- 1
- 2
- 3
- 4
ReadImage的调用被一个try 区域封装,一个可能的异常可以在catch中捕获:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
面向过程的方法
正如section “Calling HALCON Operators”中看到的那样,面向过程的方法返回一个Herror类型的数据。这个数据会分为两类:信息H_MSG_* and 错误 H_ESR_*.
典型地,如果没有错误发生,HALCON算子返回信息H_MSG_TRUE.
一旦遇到一个错误,HALCON默认打印所谓的错误信息并且终止程序。你可以通过算子set_check指定异常是否忽略。如下的例子代码检测一个文件是否正确打开;一旦遇到错误,将打印所谓的错误信息,可以通过get_error_text获得错误信息。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
请注意一些数组算子没有返回值。这样,被描述的方法会导致一个内存泄漏。请使用面向对象的方法代替。
- 【Halcon教程6】halcon/c++接口基础 之异常处理
- halcon/c++接口基础 之异常处理
- 【Halcon教程2】halcon/c++接口基础 之 halcon初认识
- 【Halcon教程3】halcon/c++接口基础 之 构造函数与Halcon算子
- 【Halcon教程4】halcon/c++接口基础 之 析构函数和Halcon算子
- 【Halcon教程7】 halcon/c++接口基础 之 HALCON图像变量类
- 【Halcon教程5】 halcon/c++接口基础 之内存管理
- halcon/c++接口基础 之 halcon初认识
- halcon/c++接口基础 之 构造函数与Halcon算子
- halcon/c++接口基础 之 HALCON图像变量类
- Halcon-VC异常处理
- halcon/c++接口基础 之 控制参数
- Halcon C#.net 编程指导(5): 异常处理(Error Handing)
- halcon/c++接口基础 之 析构函数和Halcon算子
- Halcon异常处理 get_mposition算子异常
- halcon基础之Blob Analysis
- halcon基础之Blob Analysis
- halcon/c++接口基础 之内存管理
- 【Halcon教程5】 halcon/c++接口基础 之内存管理
- 学习Docker(2017-10-4)
- volatile的详细用法
- 二叉搜索树(Binary Search Tree)
- mybatis报错:java.lang.IllegalArgumentException: Mapped Statements collection does not contain
- 【Halcon教程6】halcon/c++接口基础 之异常处理
- hdu 4734(数位dp)
- java之字符串
- HDU 6183 Color it 线段树(动态分配节点)
- Codeforces Round #438 C. Qualification Rounds
- HDOJ2064汉诺塔III
- mysql安装未设置密码 使用root账户登录报错
- 这六个理由告诉你学Java到底有多好!
- 【Halcon教程7】 halcon/c++接口基础 之 HALCON图像变量类