当前位置:编程学习 > VB >>

c语言写的程序怎么将消息传给VB?

我在VB中通过dll调用c语言写的函数,函数循环捕捉数据包,在捕捉到的数据包满足一定的条件的时候,需要将消息传递给vb,而函数继续循环运行,在这种情况下,怎样将消息传递给vb? --------------------编程问答-------------------- ?? 函数返回啊  --------------------编程问答--------------------
引用楼主 ruanqq1982 的回复:
需要将消息传递给vb,而函数继续循环运行

原函数继续运行,不需要等VB程序处理后再继续,也就是说,VB只是收消息并显示而已罗?

那简单,直接在调用函数时传个句柄进去,然后VB里面子类化接收消息即可.

函数中需要发消息时就用PostMessage投递消息到那个句柄.

不过要注意的是,消息参数不能有指针.

因为POST的消息并不知道什么时候被处理,如果参数中有指针,到时不能保证指针还是有效的. --------------------编程问答--------------------
引用 2 楼 myjian 的回复:
引用楼主 ruanqq1982 的回复:
需要将消息传递给vb,而函数继续循环运行

原函数继续运行,不需要等VB程序处理后再继续,也就是说,VB只是收消息并显示而已罗?

那简单,直接在调用函数时传个句柄进去,然后VB里面子类化接收消息即可.

函数中需要发消息时就用PostMessage投递消息到那个句柄.

不过要注意的是,消息参数不能有指针.

因为POST的消息并不知道什么时候被处理,如果参数中有指针,到时不能保证指针还是有效的.


同意! --------------------编程问答-------------------- 非常感谢,先试下。 --------------------编程问答-------------------- PostMessage的确是一个好主意,那么问题的关键点就在于C程序怎么取得VB程序中的控件的句柄了。楼主有没有考虑过这个问题?

其实有一个很简单的方法,就是C程序将消息存储在硬盘中(可以是文本文件、数据库),VB程序再访问硬盘就可以取得数据了(可以读文本文件,查询数据库),这种方法适合于实时性不高的情况。 --------------------编程问答-------------------- 同意Veron_04,还可以使用winsck来连接连个程序哦!通过网卡来连接连个程序,这个实时性也高,只要有SOCK编程经验就OK了,嘿嘿不失为一种选择啊 --------------------编程问答-------------------- 还有一种,就是通过系统的全局对象。
让你联想起啥啦?嘿嘿...
对了就是剪切板
思路给了,编程靠你自己了 --------------------编程问答--------------------
引用 5 楼 veron_04 的回复:
PostMessage的确是一个好主意,那么问题的关键点就在于C程序怎么取得VB程序中的控件的句柄了。楼主有没有考虑过这个问题?

其实有一个很简单的方法,就是C程序将消息存储在硬盘中(可以是文本文件、数据库),VB程序再访问硬盘就可以取得数据了(可以读文本文件,查询数据库),这种方法适合于实时性不高的情况。

最开始是这样想的,但对实时性的要求恰恰有点高,而且我不能让vb老是去查看文件啊,那太浪费时间。不管怎样,谢谢您的回复! --------------------编程问答-------------------- 我的目的是当数据包满足一定的条件时,能够向vb发送一个指示,将数据包传给vb,c函数继续循环运行。各位还有什么好办法? --------------------编程问答-------------------- mark --------------------编程问答-------------------- 做个dll --------------------编程问答--------------------
引用 9 楼 ruanqq1982 的回复:
我的目的是当数据包满足一定的条件时,能够向vb发送一个指示,将数据包传给vb,c函数继续循环运行。各位还有什么好办法?

我前面提到的方法是其中一种,消息投递.

还有另一种方法是我所知道的,回调.

具体做法是,将一个特定格式的函数的地址传给DLL,由DLL在需要的时候调用这个函数.

系统中比较典型的此类做法的API是SetTimer,它实现了投递消息与回调两种用法.

但回调的问题在于,一定要等到回调函数返回后,DLL中的过程才会继续.

所以还是使用消息投递吧,参数不够用的话就传个通知,并再提供个函数专门用于取数据.

EXE在收到通知后,调用那个函数从DLL中取回所需要的数据. --------------------编程问答--------------------
引用 12 楼 myjian 的回复:
引用 9 楼 ruanqq1982 的回复:
我的目的是当数据包满足一定的条件时,能够向vb发送一个指示,将数据包传给vb,c函数继续循环运行。各位还有什么好办法?

我前面提到的方法是其中一种,消息投递.

还有另一种方法是我所知道的,回调.

具体做法是,将一个特定格式的函数的地址传给DLL,由DLL在需要的时候调用这个函数.

系统中比较典型的此类做法的API是SetTimer,它实现了投递消息与回调两种用法.

但回调的问题在于,一定要等到回调函数返回后,DLL中的过程才会继续.

所以还是使用消息投递吧,参数不够用的话就传个通知,并再提供个函数专门用于取数据.

EXE在收到通知后,调用那个函数从DLL中取回所需要的数据.

非常感谢你的解答,我想了下,还是决定按您提供的这种思路去做,谢谢您提供的帮助。有问题的话希望能再次不吝赐教!!!祝好 --------------------编程问答-------------------- --------------------编程问答-------------------- 我用临时文件 --------------------编程问答-------------------- 我倒有一个办法,有些偏:
计算机上有COM1和COM2,把这两个串口连接起来,通过串口通信来传递消息,,呵呵,是不是有些偏啊??:) --------------------编程问答-------------------- 这样可以保证你的实时性,而且编程方便,缺点就是你需要准备连线 --------------------编程问答--------------------
引用 17 楼 veron_04 的回复:
这样可以保证你的实时性,而且编程方便,缺点就是你需要准备连线

老大,你的思维实在太跳跃,我同意客户也不会同意。不过,感谢你的回复。 --------------------编程问答-------------------- 1.PostMessage
2.回调函数
3.临时文件作标记 --------------------编程问答-------------------- 关注,不知最后楼主采取什么方法 --------------------编程问答--------------------
引用 19 楼 zzhgb 的回复:
1.PostMessage
2.回调函数
3.临时文件

4.串口
5.socket
6.数据库字段值
--------------------编程问答-------------------- 比较理想的做法是在C的DLL中创建一个先进先出的队列,并开启一个线程,主函数循环判断,条件符合直接向队列添加数据不做任何处理。 线程不停轮询,有数据时直接从队列取出数据向VB窗体Send WM_COPYDATA消息,利用SendMessage()必须等待返回的特性,VB就能够有序的执行DLL返回的消息,同时DLL也不会产生堵塞情况 --------------------编程问答--------------------
引用 18 楼 ruanqq1982 的回复:
引用 17 楼 veron_04 的回复:
这样可以保证你的实时性,而且编程方便,缺点就是你需要准备连线

老大,你的思维实在太跳跃,我同意客户也不会同意。不过,感谢你的回复。


读书时老师就说我思维跳跃。。。。
--------------------编程问答--------------------
引用 21 楼 zzhgb 的回复:
引用 19 楼 zzhgb 的回复:1.PostMessage 2.回调函数 3.临时文件
4.串口
5.socket
6.数据库字段值


7.类似6的输出到文本,然后传送给VB。
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,