1.3 传统代码

通常无需针对新数据类型对现有代码进行调整。但是,如果 HALCON 句柄不保存在元组或句柄类等 HALCON 数据结构中,那么将句柄的所有权从用户传递给 HALCON 可能会导致未定义的行为和崩溃(因为当持有句柄引用的最后一个 HALCON 结构被销毁时,HALCON 会自动释放句柄资源)。

针对这些情况,HALCON 提供了一种传统模式,可将句柄的所有权转移给用户代码。在这种模式下,必须明确清除句柄。HALCON 算子将以数值形式返回句柄,并接受句柄作为输入。传统句柄模式可以通过 set_system 进行开关:

set_system('legacy_handle_mode', 'true')

不建议将当前代码和传统代码混合使用。如果绝对需要,可以将句柄转换为数值(参见 handle_to_integer),然后再转换回来(参见 integer_to_handle)。

HShapeModel(tuple)之类的强制转换歧义可能会导致源代码不兼容。在 C++ 中,可以通过在包含 HalconCpp.h 之前定义 HCPP_LEGACY_HANDLE_API 来避免这些问题。在 .NET 中,为了避免强制转换歧义,请调整传统代码,例如将 tuple 改为 tuple.L