我想在启动 HalconDotNet 功能之前在应用程序中的某个位置执行 Halcon 许可证检查。然而,以下代码会生成一个异常,因为没有有效的许可证来使用用于检查许可证有效性的函数 GetSystem()。
static public void check_halcon_license()
{
HOperatorSet.GetSystem("is_license_valid", out HTuple info);
Console.WriteLine("License check returns: " + (bool)info);
}
我是否遗漏了某些内容,或者我应该捕获异常并使用它来确定其无效?在许可证墙后面进行许可证检查似乎很奇怪。
是的,检查 Halcon 许可证的正确方法是使用 try catch。这是程序员指南(第 3.4 章处理许可错误)中的 C++ 代码摘录:
try
{
HalconCpp::HTuple value = HalconCpp::HSystem::GetSystem("version");
}
catch (HalconCpp::HException &exception)
{
if ( (exception.ErrorCode() >= H_ERR_LIC_NO_LICENSE) && (exception.ErrorCode() <= H_ERR_LAST_LIC_ERROR))
{
// Handle licensing error here.
}
}
在 C# 中,只需在 catch 中定义 HalconException 即可,看看是否会收到缺少许可证的错误代码。
如果许可证无效,则 halcon 操作员将无法工作。尝试使用这样的东西:
try
{
// this will throw an exception when the license is not valid
HOperatorSet.CountSeconds(out HTuple s);
}
catch (Exception ex)
{
// license is not valid
}
不要使用
GetSystem
,而使用 GetSystemInfo
。 GetSystemInfo
无需许可证即可获取系统信息的当前值。
HOperatorSet.GetSystemInfo("is_license_valid", out var info);
Console.WriteLine("License check returns: " + info.S);