halcon/c++接口基础 之异常处理

关于运行错误,HALCON/C++默认打印错误信息并且终止程序。然而在某些应用中,放宽这个法则可能更有用。比如,如果一个应用要求用户交互式地指定一个图像文件读取,如果因为用户不能拼错文件名而终止程序的话,会很不方便。因此,HALCON/C++允许集成你自己的错误处理代码。如下的章节将分别介绍面向对象的方法和面向过程的方法

面向对象的方法

如果一个运行错误发生在面向对象的调用中,类HException的实例将会创建。(图5.8为类的定义)

class LIntExport HException {
public:HException(const HException &except);HException(const char *f, Hlong l, const char *p, Herror e, const char *m);HException(const char *f, Hlong l, const char *p, const char *m);HException(const char *f, Hlong l, const char *p, Herror e);static Handler InstallHHandler(Handler proc);void           PrintException(void);static Handler handler;   /* handler in use */Hlong          line;      /* line number where error occured */char           *file;     /* file name where error occured */char           *proc;     /* Name of procedure/operator */Herror         err;       /* error number */char           *message;  /* error text */
};

Figure 5.8: Part of the declaration of the class HException.
以上这个例子,包含了错误的所有信息。其中一个异常重要的成员如下:

  • line:错误发生的项目行号
  • file:错误发生的文件名
  • proc:实际的HALCON算子的名字
  • err: 错误代号,see below
  • message: 错误文本
    当发生后,HException的对象被传递到所谓的异常句柄。HALCON的默认异常句柄将打印对应的错误信息,并且终止程序。

作为另一种可替代的方法,你可以实现和使用你自己的异常处理。为了作为HALCON exception handler,一个程序必须有如下的签名:

typedef void (*Handler)(const Halcon::HException &exception);

然后通过HException的方法InstallHHandler安装你的异常处理程序。(见图5.8)这样一旦发生了运行错误,HALCON然后调用你自己的程序,传递实际的异常的对象作为参数。

如下的例子将展示如何使用一个用户指定的异常处理器和标准的C++异常处理机制(try catch)一起使用.对应的项目example_errorhandle.cpp可以在%HALCONEXAMPLES%\cpp的子目录找到。它实现了以上指定的目的:你可以键入一个文件名去读取;如果文件不存在,项目将打印一个对应的信息但不会停止程序,而是继续运行。

项目的开始,一个用户指定的异常处理器使用如下的方法安装:

HException::InstallHHandler(&MyHalconExceptionHandler);

被安装的程序简单地调用C++的异常处理机制throw:

void MyHalconExceptionHandler(const Halcon::HException& except)
{throw except; 
}

ReadImage的调用被一个try 区域封装,一个可能的异常可以在catch中捕获:

Herror  error_num; try
{image = HImage::ReadImage(filename); 
}
catch (HException &except) 
{error_num = except.err;return error_num;
}
return H_MSG_TRUE;

面向过程的方法

正如section “Calling HALCON Operators”中看到的那样,面向过程的方法返回一个Herror类型的数据。这个数据会分为两类:信息H_MSG_* and 错误 H_ESR_*.

典型地,如果没有错误发生,HALCON算子返回信息H_MSG_TRUE.

一旦遇到一个错误,HALCON默认打印所谓的错误信息并且终止程序。你可以通过算子set_check指定异常是否忽略。如下的例子代码检测一个文件是否正确打开;一旦遇到错误,将打印所谓的错误信息,可以通过get_error_text获得错误信息。

Herror         error_num;
char           message[1024];
long           file;set_check("~give_error");
error_num = open_file("not_existing_file", "input", &file); 
set_check("give_error");if (error_num != H_MSG_TRUE) 
{get_error_text(error_num, message);cout << "HALCON error " << error_num << ": " << message;
}

请注意一些数组算子没有返回值。这样,被描述的方法会导致一个内存泄漏。请使用面向对象的方法代替。


打赏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SVN学习(二)——SVN 提交、更新、解决冲突等操作步骤

1. 纳入版本控制 ①新建文件abc.txt ②在文件上点右键 ③添加后文件图标发生变化 2. 提交 ①使用TortoiseSVN可以提交具体某一个文件&#xff0c;或某一个目录下的所有改变。方法就是在想要提交的项目下点右键&#xff0c;然后SVN Commit...&#xff0c;就可以看到如下界面 ②日…

dat文件打开乱码_5.2 实战1:解决在Linux下打开Windows汉字文本的乱码问题

今天MK继续来分享linux的学习文章&#xff0c;今天讲的主要是实战部分。1&#xff0e;实验环境&#xff1a;CentOS 7.5 现在系统默认使用的语言是汉语。&#xff08;系统中必须安装好中文包&#xff09;。2&#xff0e;在windows系统上编辑名字为“a此文件在windows下打开正常-…

整理:深度学习 vs 机器学习 vs 模式识别

发表于2015-03-24 22:58| 11934次阅读| 来源个人博客| 26 条评论| 作者Tomasz Malisiewicz 模式识别深度学习机器学习数据科学家摘要&#xff1a;本文我们来关注下三个非常相关的概念&#xff08;深度学习、机器学习和模式识别&#xff09;&#xff0c;以及他们与2015年最热门的…

halcon/c++接口基础 之 HALCON图像变量类

在HALCON/C中&#xff0c;HObject是一个基类&#xff0c;可以表示图像变量。另外还有三种类继承自HObject. Class HImage 处理图像Class HRegion 处理区域Class HXLD 处理多边形 Regions 一个region是图像平面坐标点的集合。这样一个区域不需要被连通&#xff0c;而且可能还…

新手求大神,有其他swit-case的思路写这个程序么?

两个程序: switch-case与if-else if的区别相同点:可以实现多分支结构;不同点:switch:一般只能用于等值比较.(可以进行范围运算???---学会用switch计算范围出炉的思路____待解决)if_else if:可以处理范围计算. switch(变量) { case 变量: break; } switch括号中的"变量…

netty简单笔记

2019独角兽企业重金招聘Python工程师标准>>> Server package com.netty;import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFuture; import io.netty.channel.Channel…

halcon/c++接口基础 之 控制参数

HALCON/C可以处理各种不同类型的字母数字混合的控制参数&#xff0c;如下&#xff1a; 离散数字&#xff08;long&#xff09;浮点数字&#xff08;double&#xff09;字符串&#xff08;char*&#xff09; 控制参数的一个特殊形式是句柄&#xff0c;提供了途径去访问复杂的数…

Java编程的逻辑 (84) - 反射

​本系列文章经补充和完善&#xff0c;已修订整理成书《Java编程的逻辑》&#xff0c;由机械工业出版社华章分社出版&#xff0c;于2018年1月上市热销&#xff0c;读者好评如潮&#xff01;各大网店和书店有售&#xff0c;欢迎购买&#xff0c;京东自营链接&#xff1a;http://…

灰度图像的8位平面分解

所谓灰度图像&#xff0c;即指8位256颜色的图像。将图像的每一位分别取出来&#xff0c;我们就可以将一幅图像分解开来&#xff0c;形成8幅图像。下面我们分别介绍使用matlab分解图像与使用halcon/c分解图像的方法。 matlab8位分解 clc; clear all; A imread(lena.tif); % 显…

css 横线_atom.css正式发布,从此跟CSS框架说拜拜。

atom.css 大家好&#xff0c;我写了一个css库atom.css&#xff0c;蛮好用的&#xff0c;所以忍不住分享给大家。(https://github.com/MatrixAge/atom.css)起因写HTML几年了&#xff0c;再到如今的JSX&#xff0c;最大的感受不是枯燥&#xff0c;而是眼花。写样式的时候&#xf…

halcon模板匹配学习(一) Matching 初印象

什么是模板匹配呢&#xff1f;简单而言&#xff0c;就是在图像中寻找目标图像&#xff08;模板&#xff09;&#xff0c;或者说&#xff0c;就是在图像中寻找与模板图像相似部分的一种图像处理技术。依赖于选择的方法不同&#xff0c;模板匹配可以处理各种情形下的变换&#xf…

第五章 面向方面编程___AOP入门

上一篇讲了 AOP 和 OOP 的区别&#xff0c;这一次我们开始入门 AOP 。实现面向方面编程的技术&#xff0c;主要分为两大类&#xff1a; 一是 采用动态代理技术&#xff0c;利用截取消息的方式&#xff0c;对该消息进行装饰&#xff0c;以取代原有对象行为的执行&#xff1b; 二…

java将xml中的标签名称转为小写_深入学习Java Web(七): JSTL标签库

本文转自与博客园一杯凉茶的博客.在之前我们学过在JSP页面上为了不使用脚本&#xff0c;所以我们有了JSP内置的行为、行为只能提供一小部分的功能&#xff0c;大多数的时候还是会用java脚本&#xff0c;接着就使用了EL表达式&#xff0c;基本上EL表达式看似能满足我们的要求&am…

halcon模板匹配学习(二) 准备模板

如下&#xff0c;我们将介绍匹配的第一个操作&#xff1a;准备模板 初始时刻&#xff0c;我们准备好参考图像&#xff0c;并对其做一定的处理&#xff0c;然后我们需要从参考图像中导出模板&#xff0c;也就是将参考图像裁剪成所谓的模板图像。获取模板图像可以通过设置ROI来完…

揭秘继承技术之虚函数

虚函数 调用虚函数时函数行为将根据对象所属类的不同而变化。 父类指针或引用指向子类对象时&#xff0c;可访问子类重写方法&#xff08; virtual函数&#xff09;但无法访问在父类中没有定义的子类方法和数据成员。 #include <iostream>using namespace std;class Supe…

js 数组移除_2020前端面试--常见的js面试题

&#xff08;答案持续更新...&#xff09; 1.简述同步和异步的区别js是一门单线程语言&#xff0c;所谓"单线程"&#xff0c;就是指一次只能完成一件任务。如果有多个任务&#xff0c;就必须排队&#xff0c;前面一个任务完成&#xff0c;再执行后面一个任务&#xf…

spring-自动加载配置文件\使用属性文件注入

在上一篇jsf环境搭建的基础上 , 加入spring框架 , 先看下目录结构 src/main/resources 这个source folder 放置web项目所需的主要配置,打包时,会自动打包到WEB-INF下 首先看下pom.xml,需要引入一些依赖项: 1 <project xmlns"http://maven.apache.org/POM/4.0.0" x…

pygame碰撞检测

最近在学Pygame,花一段时间做了一个异常简陋版的"打砖块". 这次重点说一下困扰我比较长时间的碰撞检测(个人太菜..). 按照网上教程比较普遍的方法(也可能是我没看见别的),碰撞检测依次计算移动物体与被碰撞物体各个边之间坐标是否相交.例如下列代码,检测小球与窗口的…

2017-5-4 进程

进程&#xff1a;一个应用程序就是一个进程开启某个进程Process.Start("文件缩写名");通过绝对路径开启某个进程Process p new Process();p.StartInfo new ProcessStartInfo("要打开的程序绝对路径");p.Start(); 获取全部开启的进程&#xff1a;Process.…

c++分治法求最大最小值实现_程序员:算法导论,分治法、归并排序,伪代码和Java实现...

分治法我们首先先介绍分治法。分治法的思想&#xff1a;将原问题分解为几个规模较小但类似于原问题的子问题&#xff0c;递归地求解这些子问题&#xff0c;然后在合并这些子问题的解来解决原问题的解。还是拿扑克牌举例子&#xff0c;假设桌上有两堆牌面朝上的牌(牌面朝上&…