C++调用Halcon引擎,附加到进程调试

本文介绍如何使用C++调用Halcon视觉处理引擎,包括初始化引擎、加载程序、设置参数及执行程序等步骤,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++调用Halcon引擎

1、初始化Halcon引擎,HDevEngine();
2、设置程序路径,指定到devp上一级;
3、通过外部或本地程序创建程序,HDevProcedure();
4、创建调用程序实例,HDevProcedureCall();
(如果需要启动调试
4.5、通过HDevEngine 调用调试服务;
)
5、设置程序输入参数,HDevProcedureCall的Set方法设置输入参数;
6、执行程序,通过ProcedureCall调用Execute方法;
7、获取程序输出参数,HDevProcedureCall的Get方法获取输出参数;
(如果需要启动调试
8、通过HDevEngine 关闭调试服务;
)
其他:
1、通过HDevProcedure的方法可以查看输入输出参数信息,如参数个数,参数名称等;

C++代码

#include<iostream>
#include<HalconCpp.h>
#include<HDevEngineCpp.h>
#include"my_error_output.h"

using namespace HalconCpp;
using namespace HDevEngineCpp;
using namespace std;
void LoadProcedure(string procedureName);    //函数声明

HDevEngine* gMyEngine;                      //Halcon引擎
HDevProcedure* gProgram;                    //创建程序
HDevProcedureCall* gProcedureCall;          //调用程序

//变量
string ProcedureName;
HTuple paramKey, paramVal, dictHandle;

#if 1

int main()
{
    gMyEngine = new HDevEngine();
    gMyEngine->SetProcedurePath("E:/Code/L/cpp/Cpp/HalconEngine/porcedure"); //devp文件路径
    LoadProcedure("test");
    return 0;
}
#endif // 0

void LoadProcedure(string procedureName)
{
    ProcedureName = procedureName;
    try
    {
        gProgram = new HDevProcedure(procedureName.c_str());
        gProcedureCall = new HDevProcedureCall(*gProgram);

        printf("Strat Debug Server\n");
        gMyEngine->StartDebugServer();  //启动调试服务

        gProcedureCall->SetWaitForDebugConnection(true);  //★等待debug连接,程序会在Execute步骤等待,直至Halcon附加到进程
        printf("Wait For Connection...\n");

#pragma region Test 调试函数 只作显示

        //cout << "输入参数个数: " << gProgram->GetInputCtrlParamCount() << endl;
        //cout << "输出参数个数: " << gProgram->GetOutputCtrlParamCount() << endl;

        //for (size_t i = 1; i <= gProgram->GetInputCtrlParamCount(); i++)
        //{
        //    cout << gProgram->GetInputCtrlParamName(i) << endl;
        //}

        //for (size_t i = 1; i <= gProgram->GetOutputCtrlParamCount(); i++)
        //{
        //    cout << gProgram->GetOutputCtrlParamName(i) << endl;
        //}

#pragma endregion

        gProcedureCall->SetInputCtrlParamTuple("Param1", "test");   //设置输入参数

        gProcedureCall->Execute();  //执行程序

        HTuple hv_Result;
        hv_Result = gProcedureCall->GetOutputCtrlParamTuple("Result");  //获取输出参数
        string str_Result = (string)hv_Result[0].S();
        printf(str_Result.c_str());

        gMyEngine->StopDebugServer();   //停止调试服务

    }
    catch (HDevEngineException ex)
    {
        DispMessage(ex.Message());   //Halcon例程自带错误函数

    }

}

Halcon hdvp代码

try

   *输入

    Param1:=Param1

    Result:='show:'+Param1


catch (Exception)

    Result:=-1

    ErrorString:=Exception

endtry

return ()

hdvp参数

hdvp文件输入输出参数

效果

1、运行cpp程序后
运行cpp程序,等待halcon附加到进程

2、打开hdvp文件,点击左上角-执行,选择-附加到进程
打开hdvp文件,附加到进程
调式服务器默认确实即可。
默认确定即可
链接成功后,可以F6单步调试hdvp文件。
链接成功后
运行成功后在控制台显示hdvp输出结果,如下图:
运行hdvp后的输出结果

总结

百度网盘代码链接,提取码:vp42

程序参考halcon官方例程,如有不对欢迎指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值