Halcon C++ 异常捕获不到 程序崩溃 MFC

本文探讨了在VS2013的MFC C++环境下,使用Halcon10进行图像处理时遇到的程序崩溃问题,特别是连接相机和处理图片时的异常捕获难题。作者分享了通过自定义异常处理器并正确安装,以提高异常捕获稳定性的解决方法。

Halcon 10   VS2013平台   MFC   C++. 


         最近老是出现程序崩溃,整的整个人都快崩溃了。 
        因为,异常捕获不稳定,大多数都捕获不到,软件就崩溃了。是连接相机的时候才出现,加载图片处理,正常情况下,没有问题。 
        崩溃的情况有: 
        1,显示图片是,图片是正常的,就崩溃了,如  disp_obj(outRegion, hWndHandle);; 
         2,阈值分割处理图片,又是也会崩溃,如 edges_sub_pix(ImageInvert, &Edges, "canny", 3, 20, 40); 

 

处理办法:

Halcon的异常(HDevExpDefaultException)没有被“安装”。 
Halcon中提供了安装方法,static Handler InstallHHandler(Handler proc)。 
可以定义自己程序的异常,在try catch前使用InstallHHandler安装。 
修改方法: 
1,自定义异常: 
void MyHalconExceptionHandler(const HException& except) 

throw except; 
}, 
2,在构造函数中,进行安装: 
HException::InstallHHandler(&MyHalconExceptionHandler); 

3,调用try catch块 
try 

   tuple_max(hv_Length, &hv_Max); 

catch(HalconCpp::HException &except) 

   //do something 
}

在使用 Halcon 19 进行 C++ 开发时,某些情况下未抛出异常的问题可能与 HALCON异常处理机制的设计方式有关。HALCON/C++ 提供了两种异常处理模式:**基于 C++ 异常(throw/catch)的机制**,以及**基于返回值的错误处理机制**。默认情况下,HALCON 可能并未启用 C++ 异常抛出功能,而是通过返回错误代码来指示操作失败。 这种情况通常与编译器设置或 HALCON 的配置有关。例如,在某些项目配置中,`HException` 类的使用可能被禁用,或者编译器未启用对 C++ 异常的支持,导致即使发生错误也不会抛出异常。在使用 HALCON 函数时,应检查返回值以判断操作是否成功[^1]。 此外,在使用 Microsoft Visual Studio(如 VS2019)进行开发时,若未正确配置项目属性(如未启用 `/EHa` 或 `/EHsc` 编译选项),也可能导致异常处理机制未能正常工作。需要确保项目配置与 HALCON异常处理模式一致[^2]。 为了启用 C++ 异常抛出机制,可以在代码中定义宏 `H_USE_EXCEPTIONS`,这样 HALCON 函数在发生错误时将抛出 `HException` 异常,而不是返回错误代码。例如: ```cpp #define H_USE_EXCEPTIONS #include "halconcpp.h" using namespace HalconCpp; int main() { try { // 示例代码:尝试加载不存在的图像以触发异常 HImage image; image.ReadImage("non_existent_image.png"); // 此操作应抛出异常 } catch (HException &except) { // 捕获 HALCON 异常并输出错误信息 std::cerr << "HALCON Exception: " << except.ErrorMessage() << std::endl; } catch (...) { std::cerr << "Unknown exception occurred." << std::endl; } return 0; } ``` 如果仍然未抛出异常,则应检查 HALCON 安装路径下的 `halconcpp.h` 头文件中是否启用了异常支持,或者确认使用的 HALCON 版本是否为支持 C++ 异常处理的版本。同时,确保程序的构建平台(32 位或 64 位)与 HALCON 库的版本一致,否则可能导致运行时错误未被正确捕获[^3]。 在 MFC 项目中使用 HALCON 时,还需要注意是否在头文件中正确引入了命名空间 `HalconCpp`,并确保所有函数调用的参数类型与 HALCON 接口要求的类型匹配。例如,传递 `HTuple` 参数时,应确保其类型与函数期望的参数类型兼容,否则可能导致未定义行为[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值