OLE(三)

        微软是这么解释DDE的:Microsoft® Windows® 提供了几种方法来给应用程序之间传送数据,其中之一就是动态数据交换协议(DDE)-----一套由一组消息组成的规则。
为了共享数据就在应用程序之间发送消息;要是交换彼此的数据就得使用共享内存。应用程序可以使用DDE协议进行一次性的数据传输,也可以连续交换数据,要做的就是在数据准备
好时,发送消息来通知另一个应用程序进行更新即可。 由于Windows有一个消息机制,所以在应用程序之间传送信息最佳选择就是传递消息了。可是,消息只有两个参数 (wParam 和lParam) 可以进行传送数据。这样导致的
结果就是,如果传送的数据多于几个字的时候,那么这些参数就只能间接的引用其他的数据块。比如:需要传送三个32位的数据,如果用消息来进行,那么一次最多传送两个数据,剩
下那个还得传一次。如果两个应用程序没有某种协议的话,那么第二次传送数据的时候,接收方肯定会有意见:"怎么又来了,请问这个数据表示什么意思?”,当然如果双方协调好了,
那么接收方在收到一次数据后,就会作个记号,表示已经收到一次,还需要接收一次。这是个好的解决方案,问题是如果不是三个数据,是上万个的数据,甚至更多呢?那么接收方也
许又有意见了:“老大,难道就不能一次传完吗?”于是我们可以发送WM_COPYDATA 消息,这个消息功能蛮强大的,它的WPARAM参数指向传送数据的窗口句柄(是一个32位的值,相
当于指针,标识窗口的唯一性,如同我们人类的身份证一样),而LPARAM参数就指向一个COPYDATASTRUCT数据结构,其定义如下:


那个lpData就是一个指针,指向要传送的数据,cbData表示传送数据的大小,用字节作单位。这里的lpData就是间接引用传送的数据。 可是DDE协议就准确的定义了应用程序应该如何使用 wParam 和lParam 这两个参数并借助全局原子以及共享内存句柄来传递大的数据。参数wParam还是用来表示传送数据
的窗口,lParam 则是函数PackDDElParam的返回值。我们来看看微软如何解释PackDDElParam这个函数的。微软说:“该函数把DDE的lParam 值封装成用于进程之间共享DDE数据
的内部结构。它的返回值必须是作为DDE消息的lParam 参数来进行投递的,不得用作其他的用途。在应用程序投递返回值后,不需要再处理lParam 参数。应用程序只能为了投递DDE
消息而调用该函数。” 也就是说PackDDElParam是为了DDE而专用的,而它返回值竟然还是属于内部结构,自然是不公开的,程序员也就是无法知道,除非反汇编进一步跟踪,进一步分析,但跟此
文无关。这也就说明了为什么程序员不自己搞一套协议来传送大的数据,是可以的,但比较麻烦。

转载于:https://www.cnblogs.com/damitong/archive/2011/10/02/2198277.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值