c++有时候抓不住halcon的异常的解决办法

2020-07-29  本文已影响0人  卡拉肖克_潘

之前怀疑过这件事,但是从来没有真正验证过,据说原因是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

上一篇 下一篇

猜你喜欢

热点阅读