使用winform和VP的一些问题

  经常会用到winform和VP开发一些上位机视觉检测软件,过程期间也经常会遇到一些问题,开个帖子来整理下遇到过的一些问题,方便后续遇到类似的问题能够找得到解决的办法。

  VP 9.0 听说是其中的控件只支持winform,CogRecordDisplay无法在WPF上加载,可能是历史版本原因吧,不知道更新的VP会不会有更好的支持。

  VP 9.0在安装的时候会有个复选框 是选择是否安装VS的工具箱插件,用于分类VP的界面控件用以使用的,但是这个插件安装貌似只支持VS2013版本或者之前的版本,我尝试在2015版本和2019版本的VS上安装,均告失败,VP安装程序报错也很直观,就是直白的告诉你不支持高版本的VS,在高版本的VS中,需要手动在工具箱中添加VP提供的界面控件,找到C盘路径下的对应DLL文件,加载起来 就可以拖动使用了。

  使用VP控件后,程序退出时,VS报错:未知模块给出一个内存上的错误

  这个错误会在VS调试结束的时候给出,单独运行exe文件的并退出的时候不会有错误弹窗,很容易会被忽略,但是这个错误也会造成一个比较严重的后果,就是在VPP中的相机工具有可能会乱掉,并在后续的使用中 无法被相机工具初始化,

  查看GIGE Configuration 配置工具中 会发现该相机在随着手动刷新 可能频繁的掉线 上线,cmd中连续ping 会发现连续掉线上线并不影响和相机之间通讯,但还是零散出现两次ping超时的情况,个人考虑可能是在报出内存错误后,程序在内存上直接崩掉,而VPP是在内存上的对象也立马销毁,没有正常的结束,可能会导致VPP中适配GIGE相机的部分丢失,造成相机可能会有类似半连接的状态,从而使下次初始化相机失败,经过测试,此时重启电脑可恢复正常;

  我回头又考虑为何会报内存上的错误,而且这个错误无法定位到某句代码上,这个就给DEBUG带来了很大的难度,多次测试之后我发现我开了一个参数窗口后关闭程序就会出现内存错误,而我什么都不动作,就单纯的开启软件,关闭软件则不会报内存错误;

  我查看了这个窗体,这是一个参数修改的窗体(也包括修改VPP),为了方便,我将这个窗体写成静态单例类,通过GetInstance.Show()打开,而关闭的时候,为了避免对象被销毁,我在FormClosing函数中取消了关闭操作,我一想,有没有可能在整个程序关闭的时候还留了这个类的对象在内存上,从而导致的内存错误呢,说着我添加了一个bool值,用以区分我正常关闭窗体(点击窗体右上角关闭按钮,实则取消关闭,变为隐藏 Hide())和整个工程退出时销毁该对象,修改后果然发现没有内存错误了;

  仔细一想,静态类窗体我也不止写这一个吖,在程序中还有一个显示通知消息的窗体,为了方便我也是用的静态单例,而且在全局退出程序时,我也没有对消息显示窗体多做任何处理,百思不得其解;

  猜测可能是因为参数窗体中使用了VP的控件,无法正常销毁会造成无法预料的效果,对了,在VPP中如果没有相机工具,也就是说如果没有通过GIGE占用相机的话,也不会出现内存损坏这样的错误的,目前暂时这样解决掉这个问题,记录一下,后续了解更多之后再更新。

  

原文地址:https://www.cnblogs.com/kita/p/15004522.html