哪位老师给讲讲DDE的通讯机制
比如 
1 发送端LinkExecute之后是否需要等待接受接收端接收完毕的信号
  发送端如何确认接收端已经全部接收完毕
  我遇到的问题是:如果接收端在LinkExecute事件中接收数据后直接进行一个很长时间的处理
                  发送段就会莫名其妙的超时(我已经在接收端的LinkExecute事件中第一时间设置了Cancel=False)
2 如何实现双向通讯 也就是 接受端在处理接收到的数据时 实时地把处理过程中产生的数据返回给发送端,这是否意味着原来的接收端变成了发送端?是否需要(/如何)重新建立连接
  我遇到的问题是:在处理接收到数据时无法发送返回数据(在LinkExecute事件中没有报错信息),但如果用点按钮的方式则可以发送返回的数据。
发送端窗体部分代码:
Private Sub Command1_Click()
LinkAndSendMessage txt1.Text
End SubPrivate Sub Form_LinkExecute(CmdStr As String, Cancel As Integer)
Cancel = False
txtInfo.Text = CmdStr
End SubPrivate Sub LinkAndSendMessage(ByVal Msg As String)
Dim t As Long
txt1.LinkMode = 0               '注释:--
txt1.LinkTopic = "p2|DDE2"   '注释:  |______连接DDE程序并发送数据/参数
txt1.LinkMode = 2               '注释:  |      “|”为管道符,是“退格键”旁边的竖线,
txt1.LinkExecute Msg            '注释:--        不是字母或数字!t = txt1.LinkTimeout     '注释:--
txt1.LinkTimeout = 1     '注释:  |______终止DDE通道。当然,也可以用别的方法
txt1.LinkMode = 0        '注释:  |      这里用的是超时强制终止的方法
txt1.LinkTimeout = t     '注释:--
End Sub接受方代码Private Sub Command1_Click()
LinkAndSendMessage txt2.Tag
End SubPrivate Sub Form_LinkExecute(CmdStr As String, Cancel As Integer)
Dim i As Integer
Cancel = False
On Error GoTo errHdl
Do
i=i+Val(CmdStr)
LinkAndSendMessage i
DoEvents
Loop
Exit Sub
errHdl:
LinkAndSendMessage Err.Description 
End SubPrivate Sub LinkAndSendMessage(ByVal Msg As String)
Dim t As Long
txt2.LinkMode = 0              ' 注释:--
txt2.LinkTopic = "P1|DDE1"  ' 注释:  |______连接DDE程序并发送数据/参数
txt2.LinkMode = 2
                              ' 注释:  |      “|”为管道符,是“退格键”旁边的竖线,
txt2.LinkExecute Msg         ' 注释:--        不是字母或数字!
'txt2.LinkPoke
t = lblDDE.LinkTimeout    ' 注释:--
txt2.LinkTimeout = 1    ' 注释:  |______终止DDE通道。当然,也可以用别的方法
txt2.LinkMode = 0       ' 注释:  |      这里用的是超时强制终止的方法
txt2.LinkTimeout = t    注:为了不浪费 暂时先给100分,如果有好的答案,我会再加分的。
谢谢!

解决方案 »

  1.   

    反正这个东西对我来说还是少用的好啊,完全可以用其他的技术代替。
    只是微软写的东西喜欢这个技术,貌似快捷方式也是拿这个做的。
    看看这个
    http://topic.csdn.net/t/20030901/12/2210236.html
      

  2.   

    能有其他替代的技术更好 我也发现有时DDE好象有延迟
    但如果用剪贴板 又担心发生意外
    还有什么其他的办法呢 一台机器上用winsock又有点夸张了
      

  3.   

    一台机器上用winsock,我觉得没什么~~ 
      

  4.   

    http://topic.csdn.net/t/20030628/12/1967691.html
      

  5.   

    那篇文章我看过了 介绍的也不甚明了
    针对我的实际问题来说
    超时问题可以暂且不管 但是服务器端如何确认客户端已经接收到了完整的数据 这个问题很让我烦恼
    还有 客户端发送数据给服务器 直接用代码调用LinkAndSendMessage毫无反应 但手动点Command1在调用LinkAndSendMessage就可以成功发送数据到服务器端 这个问题更让我郁闷
    (另:LinkPoke到底该怎么用呢
    是不是客户端回传数据一定要用LinkPoke?)