【VM服务管家】VM4.2平台SDK_6.4 结果获取类

本文档介绍了在VM4.2平台上如何通过流程输出和模块输出获取数据结果,包括整型、浮点型、字符串型和图像型数据。推荐使用流程输出以实现高内聚低耦合。同时,详细阐述了流程回调的注册和使用方法,包括C#和C++中的应用示例,帮助开发者掌握流程开始与结束的回调函数。

2.4.1 数据结果:通过流程输出或者模块输出获取数据结果的方法

描述
环境:VM4.2 + VS2013及以上
现象:方案或流程运行执行之后,就可以获取结果(建议将结果获取写在回调函数里),可以通过流程或者模块的输出获取渲染结果和数据结果,推荐使用流程的输出,符合高内聚低耦合,渲染结果通过绑定渲染控件进行显示,数据结果分为整型、浮点型、字符串型和图像型等等,VM二次开发如何获取数据结果?
解答
数据结果的获取可以通过流程的输出或者模块的输出,推荐使用通过流程的输出,符合高内聚低耦合的思想,VM4.2二次开发相比较VM4.0二次开发获取数据结果有一些更新,详细介绍如下所示:
1 通过流程的输出获取数据结果
1.1 流程配置-输出设置
在这里插入图片描述

1.2 获取整型、浮点型、字符串型数据

C#
VmProcedure vmprocess = (VmProcedure)VmSolution.Instance["流程1"];
var moduResult = vmprocess.ModuResult;
string str = moduResult.GetOutputInt(“out”).pIntVal[0].ToString();                
string str1 = moduResult.GetOutputFloat(“out0”).pFloatVal[0].ToString();
string str2 = moduResult.GetOutputString("out1").astStringVal[0].strValue;
//获取流程结果列表,str3与str2结果一致
List<VmDynamicIODefine.IoNameInfo> ioNameInfos = VmProcess.ModuResult.GetAllOutputNameInfo();
string str3 = VmProcess.ModuResult.GetOutputString(ioNameInfos[2].Name).astStringVal[0].strValue;

1.3 获取图像数据
流程输出设置中输出IMAGE类型的图像数据,能通过前面参数名称ImageD直接获取。

C#
ImageBaseData_V2 processImageData = VmProcess1.ModuResult.GetOutputImageV2("ImageD");
int width = processImageData.Width;//宽
int height = processImageData.Height;//
VM4.2平台SDK 6.3中,控件嵌入的使用主要涉及将VisionMaster应用程序或其部分功能嵌入到用户自定义的软件界面中,通常通过调用Windows API函数如`SetParent`和`MoveWindow`来实现。以下是一个典型的应用场景与实现方式: ### 控件嵌入的基本流程 1. **启动VisionMaster进程** 首先需要通过代码启动VisionMaster应用程序,确保其主窗口句柄可以被获取。可以使用`Process.Start`方法启动程序,并通过`WaitForInputIdle()`方法等待其初始化完成。 2. **获取主窗口句柄** 在VisionMaster启动后,通过`MainWindowHandle`属性获取其主窗口的句柄(`IntPtr`型),这是后续操作的基础。 3. **设置父窗口** 使用`SetParent`函数将VisionMaster的主窗口设置为用户界面中某个Panel控件的子窗口。这样可以将整个VisionMaster界面嵌入到Panel中。 4. **调整窗口大小和位置** 通过`MoveWindow`函数将VisionMaster的主窗口调整至Panel控件的尺寸和位置,确保其在用户界面中正确显示。 ### 示例代码(C#) ```csharp [DllImport("user32.dll", EntryPoint = "SetParent")] public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool BRePaint); // 启动VisionMaster进程 Process p = Process.Start(@"D:\VisionMaster4.2.0\Applications\VisionMaster.exe"); // 等待VisionMaster完成初始化 p.WaitForInputIdle(); // 获取主窗口句柄 IntPtr appWin = p.MainWindowHandle; // 将VisionMaster窗口设置为Panel控件的子窗口 SetParent(appWin, panel1.Handle); // 调整VisionMaster窗口大小以适应Panel控件 MoveWindow(appWin, 0, 0, panel1.Width, panel1.Height, true); ``` ### 注意事项 - 在调用`SetParent`之前,确保VisionMaster已经启动并完成初始化,否则可能导致句柄获取失败。 - `MoveWindow`调用后,可能需要根据实际界面布局调整参数,以保证嵌入的窗口显示正确。 - 如果需要在多个Panel中切换显示不同的VisionMaster实例,应确保每个实例的句柄管理清晰,避免冲突。 ### 开发环境要求 - SDK版本:VM4.2平台SDK 6.3 - 开发工具:Visual Studio 2015及以上 - 编程语言:C# 上述实现方式基于SDK提供的功能和Windows API的调用机制,适用于需要将VisionMaster界面深度集成到客户软件中的场景[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值