请问在DDE中,自己编写服务端和客户端,客户端执行linkpoke之后,服务端怎样接受linkpoke发来的信息?

解决方案 »

  1.   

    动态数据交换(dde)是windows应用程序间通讯的基本方法之一,在动态数据交换的过程中,提供数据和服务的应用程序称为服务器,请求数据或服务的应用程序则称为客户。  dde交谈是由客户程序启动的。如果得到服务器程序的响应便可在两个应用程序之间建立起一条数据通道,开始进行信息的动态交换和传递。一个windows应用程序可以是一个程序的客户,同时也可以是另一个程序的服务器。本文将介绍如何用visualbasic来编写dde服务器和客户程序。  一、vb中的dde事件  当动态数据交换启动时,会产生若干事件。通过响应这些事件,我们可以编写代码来处理动态数据交换时产生的问题。  1、linkopen事件  该事件在启动dde时产生,如果vb的窗体作为服务器,则该事件作用于窗体,响应该事件的过程为form—linkopen。如果是vb中的控件作为客户接收数据,则该事件作用于控件。通过响应linkopen事件可以在dde启动时作一些初始化的处理。  2、linkclose事件  该事件在关闭dde链接时产生。通过响应该事件可在dde关闭时作一些善后处理工作。  3、linkerror事件  该事件在进行动态数据交换中发生错误时产生。通过由事件处理过程的参数传递的错误代码,可以在事件过程中处理不同的故障。  4、linkexecute事件  该事件通常是作为服务器的程序在收到客户程序发送的命令时产生。服务器程序通过响应该事件来执行客户程序发送的命令。  5、linknotify事件  该事件发生在客户程序。只有dde链接是以通知链接方式进行时才会产生这个事件。在这种情况下,当服务器中的数据发生变化时,就会在客户程序中引发linknotify事件,告诉客户方源数据已经更新,客户方在响应linknotify事件时,可通过调用linkrequest方法请求将更新的数据发送过来。  二、vb中dde的方法  1、linkrequest方法  该方法是客户程序用来请求服务器程序将更新了的数据发送过来。  2、linkexecute方法  该方法是客户程序用于向服务器程序发送执行命令时调用。通常会以服务器程序规定的命令字符串作为调用参数。  3、linkpoke方法  dde的交换可以是双向的。该方法用于由客户程序向服务器程序发送数据。  4、linksend方法  当dde所交换的数据是图形时,如果建立的是自动链接,则只要源图形中有一个象素发生变化也会引起一次发送整个图形的操作,这样一来就会大大地降低系统的性能。为此,可以在图形更新完毕时使用该方法将图形信息发出。  三、vb中dde的属性  1、linkmode属性  该属性用于vb的窗体时可以决定该窗体是否是一个dde服务器的数据源。可设置的值有两个:none表示不作为dde的数据源,source表示作为dde的数据源。该属性用于控件时,将指定启动/关闭dde链接。可设置的值有四个:none表示关闭dde链接,automatic表示用自动方式启动dde链接,manual表示用手动方式启动dde链接,notify表示用通知方式启动dde链接。  2、linktopic属性  该属性用于客户程序中的控件,它指定dde服务器应用程序名及动态数据交换的主题。  3、linkitem属性  该属性用于客户程序中的控件。它指定dde实际传送的数据,通常是服务器程序中作为数据源的窗体里的一个控件名。  4、linktimeout属性  该属性用于客户程序中的控件。在dde中,服务器对于客户请求的响应时间是可变的。客户程序可以设置linktimeout属性来控制等待的时间,从而避免因服务器响应时间过长而产生错误。  四、实例  以下给出用vb4编写的服务器程序和客户程序的例子。其中服务器程序中的form1作为dde的数据源,在form1中设置一个文本框控件txtsource和一个时间控件timer1,设置每隔5秒改变一次txtsource控件的text属性值。在客户程序中使用一组单选按钮来选择dde的链接方式,使用一个文本框控件用于接收来自服务器的数据,设置一个命令按钮来执行手动链接和通知链接时的请求更新数据命令。程序编写好后,先运行服务器程序,然后运行客户程序。  1、服务器程序ddesrv.vbp  控件类型控件名称属性设置值  窗体form1linkmode1──source  窗体form1linktopicsourceform  文本框txtsourcetext1  定时器timer1interval5000  privatesubtimer1—timer()  txtsource.textΚnottxtsource.text  endsub  2、客户程序ddeclnt.vbp  控件类型控件名称属性设置值  窗体form1  文本框text1  单选按钮option1captionautomatic  单选按钮option2captionmanual  单选按钮option3captionnotify  命令按钮command1captionlinkrequest  命令按钮command1enabledfalse  privatesubform—load()  text1.linkmodeΚ0  text1.linktopicΚ″ddesrv sourceform″  text1.linkitemΚ″txtsource″  endsub  privatesubcommand1—click()  text1.linkrequest  endsub  privatesuboption1—click()  text1.linkmodeΚ1  command1.enabledΚfalse  endsub  privatesuboption2—click()  text1.linkmodeΚ2  command1.enabledΚtrue  endsub  privatesuboption3—click()  text1.linkmodeΚ3  command1.enabledΚfalse  endsub  privatesubtext1—linknotify()  text1.linkrequest  endsub
      

  2.   

    我有一个DDE的源程序的你要的话,联系我,,一个非常好的例子,,我的MSN是 [email protected]