悟道WM_COPYDATA消息机制并扩展之(visionpro toolgroup思考突破)(六)

我们在工具组toolgroup的保存和加载(利用xml load/save)一篇中,实现相应功能,他是在工具图像处理动态链接库dll中的,而若我们自己创建了一个项目程序,若要实现相应功能,该怎么办?我是这样考虑的,首先,这是一种主动行为,即由自己创建的程序发动的,而且是在编程时,非运行时,若有这样一个toolgroup.loadxml()函数可以调用该多好?我们来设计一个这样的函数,如下:toolgroup.loadxml(){//主动行为,程序中调用

1,发消息给工具图像处理动态链接库dll

2,由dll完成loadxml()动作。//这样我们不用再去点击按钮

}

那么,相仿,toolgroup.savexml()也可以这样实现。

以上的好处是,我们不仅在动态库中可以完成操作,在应用程序中也可以完成相应操作

这只是这篇的一个引子,接下来,我们就会想到toolgroup.run(),是的,在cognex的visionpro中,象这样的操作太多了,而有一天,你就会按捺不住,想要知道这到底是怎么一回事?我们来揭示他(这只是我的方法,或许是一厢情愿的搭不上边,原创嘛!实现就好),没有上面的引子,我还真揭(解)不开这个锅(笑!)。如下:

toolgroup.run(){//主动行为,供程序中调用

1,发消息给相机取像动态链接库dll,

2,相机取像后,发出WM_COPYDATA(grab),你可以看到,这个最终到达了工具图像处理动态链接库

3,toolgroup中相关工具运行后,返回结果,仍然以消息方式,

4,在自己创建的项目程序中截获,并给相机取像动态链接库dll一份。

}

我们原来的泵源WM_COPYDATA(grab,若井中取水)以手动方式在相机取像动态链接库中操作,现在不必了,我们以toolgroup.run()的调用实现了掌控主动(注,发起一次WM_COPYDATA(grab)toolgroup工具组就会运行一次)。

若我们还想知道的更详细结果是工具组toolgroup谁返回的?我们还可以设计一个返回类CResult(这是后话),我想这个创意不仅仅是visionpro独有。

我们来实现一下toolgroup.run(),看代码:

 private void toolgroup主动运行_Click(object sender, EventArgs e)
        {  
            mybytes.command = "取像并泵出";//井中水多,我们只取一桶所用之水,即grab
            mybytes.comeFromWindow = "TestMegaugingLib";
           //basler200wcamuc1//定义了一个工具组运行的消息
            SendMsg(basler200wcamuc1.Handle, WM_TGRUN, 0, ref mybytes);//WM_TGRUN
        }

有一个问题要解释一下,相机和工具组两个动态链接库dll写死后,并不知道我们创建的项目程序的窗口是"TestMegaugingLib",这样,他回传消息时,就会有障碍,我们处理的的办法是,你也看到了,我们发消息时,把窗口名也一并带上,dll接受后就会解析出来,他就知道返回哪里了,程序就会变得灵动起来。

只要肯用心,以上的解析一定会变成toolgroup.run()这样的格式,而实质就是这样

待续(慢慢来!...........)每天一点小改变☺

我的邮箱liuganggang_1978@163.com;734523623@qq.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值