您的位置:首页 > 其它

调用halcon函数时的错误处理

2014-01-08 16:01 134 查看
注:以下材料来自halcon帮助文档,因水平有限,难免有误,欢迎指正。

0 概述

在遇到一个运行时错误时,HALCON(C++)会以默认的方式给出错误信息,并终止程序。然而,在某些情况下,我们并不希望按照这样的规则来处理错误。例如。当一个程序允许用户交互性地读取一个文件的时候,如果用户输入了错误的文件名,我们希望能终止程序运行。所以,HALCON(C++)允许我们完善自己的错误处理方式。下面是halcon给出的两种处理方式。

1 面向对象的处理方式

如果一个错误发生在一个面向对象的函数调用中,系统会自动生成一个HException类的实例,这个实例包含了错误的所有信息,一个exception的成员包括:

line:错误发生的代码行号

file:错误发生的文件名

proc:HALCON函数名

err:错误代号

message:错误信息

以上信息生成后会被传递到所谓的exception handler,HALCON的默认exception handler会打印出这个错误信息,并终止程序。作为一个选择方案,我们可以执行和使用自己的exception handler。要充当一个HALCON的exception handler,一个程序必须要有以下的签名:



我们通过HException类的方式来安置我们的exception handler程序,参考如下:



为了避免运行时错误,HALCON会调用我们的程序,通过一个参数的形式传递一个实际exception实例。下面一个例子展示了怎样结合标准C++ exception处理机制(try...catch)来使用一个用户指定的exception handler。它主要实现功能:用户指定要被读取的文件,如果一个文件不存在,程序会打印出错误信息,但是可以继续运行。

在程序的开头处,一个用户指定的exception handler是用以下这句代码来植入:



以上这个代码只是简单的通过throw把exception对象传递给C++ exception处理机制:



那么,对ReadImage函数的调用就会被压入一个try block,一个有可能随后发生的exception就会在一个对应的catch block里面执行:



2 面向过程的处理方式

在面向过程的方式里,函数调用会返回一个Herror类型的值,这个值可以分成两类:信息类H_MSG_*和错误类H_ERR_*。一般地,如果没有发生错误,HALCON函数会返回信息H_MSG_TRUE。遇到一个错误时,HALCON会默认地打印对应的错误信息并终止程序。我们可以通过调用函数set_check来使无效(或激活)这个响应行为。还是上面读取文件的例子,如果遇到一个错误,它会打印响应的错误信息,这个信息可以通过函数get_error_text来获得。



要注意的是一些tuple类型的函数并没有返回值,那么这种错误处理方式会导致内存泄漏,在这种情况下应该使用面向对象的方式来处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: