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

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
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C#调用Halcon引擎可以通过添加引用halcondotnet.dll和hdevenginedonet.dll来实现。以下是两种调用Halcon引擎的方法: 1. 在C#中使用Halcon引擎调用Halcon程序 首先,需要在Halcon中导出C#文件,然后在C#中调用。具体步骤如下: - 在Halcon中打开需要调用的程序。 - 选择“文件”->“导出”->“导出C#文件”。 - 在C#中添加对halcondotnet.dll和hdevenginedonet.dll的引用。 - 在C#中创建Halcon引擎实例并调用Halcon程序。 以下是一个示例代码: ```csharp using HalconDotNet; class Program { static void Main(string[] args) { // 创建Halcon引擎实例 HDevEngine engine = new HDevEngine(); engine.SetScriptPath("path/to/halcon/program"); // 调用Halcon程序 engine.ExecuteScript("halcon_program.cs"); } } ``` 2. 在C#中使用Halcon引擎调用.hdev下本地函数或者.hdvp外部函数 在C#中使用Halcon引擎调用.hdev下本地函数或者.hdvp外部函数也是通过添加引用halcondotnet.dll和hdevenginedonet.dll来实现。具体步骤如下: - 在C#中添加对halcondotnet.dll和hdevenginedonet.dll的引用。 - 在C#中创建Halcon引擎实例并调用.hdev下本地函数或者.hdvp外部函数。 以下是一个示例代码: ```csharp using HalconDotNet; class Program { static void Main(string[] args) { // 创建Halcon引擎实例 HDevEngine engine = new HDevEngine(); // 调用.hdev下本地函数 engine.CallProcedure("local_procedure"); // 调用.hdvp外部函数 engine.CallExternalProcedure("external_procedure", "path/to/external/procedure.hdvp"); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值