之前怀疑过这件事,但是从来没有真正验证过,据说原因是halcon自己先捕获异常处理了,需要自定义异常处理,并使用halcon的 InstallHHandler()安装后才能抓住。现在对比一下看看。直接上代码:
#define HCPP_LEGACY_API
#include "HalconCpp.h"
using namespace HalconCpp;
void ExceptionHandler1(const HException& except)
{
Herror heror = except.ErrorCode();
throw(except);
}
void action()
{
HTuple hv_a, hv_Max, hv_c;
HTuple hv_b;
// HException::InstallHHandler(&ExceptionHandler1);//halcon的异常还得halcon抓,放开这行代码就能抓住第二个异常。
try//测试抓0分母异常,都能抓住
{
hv_c = 0;
hv_b = 2.0 / hv_c;
}
// catch (Exception)
catch (HException &except)
{
Herror heror = except.ErrorCode();
if (except.ErrorCode() == 1302)
{
std::cout << heror << std::endl;
}
}
try//测试halcon空数组异常,只能halcon自己抓的住。当然新版的halcon导出函数是TupleMax,就算不用halcon也能抓住,这里只是找一个c++抓不住的例子。
{
hv_a = HTuple();
tuple_max(hv_a, &hv_Max);
}
//catch (Exception)
catch (HException &except)
{
Herror heror = except.ErrorCode();
std::cout << heror << std::endl;
}
system("pause");
}
int main(int argc, char *argv[])
{
action();
}
参考:https://blog.csdn.net/weixin_43913330/article/details/98927546
halcon帮助 F1:Programmer‘s Guide 5.3,10.9
网友评论