秋林拾叶【mud.Gameivy.COM】 >> 论坛 >> ┈┋MUD 交流区┋┈ >> 武林群侠传 >> 机器人分享区 >> 用VB6.0写Zmud下的DDE机器人服务端简明教程
用VB6.0写Zmud下的DDE机器人服务端简明教程 linner,2006-11-20 19:58:52



前几天ivy要我写dde教程,其实dde已然过时,只不过因为我们这些玩MUD的,大多是效忠于Zmud4.62的死党,而Zmud4.62对外部程序的直接通信只有DDE(用文件交换实时性不够),所以没办法只有用它,既然是淘汰的技术,也没有必要深究,学到能写机器人就行了,在这里我就简单地讲一下在VB里怎么配合ZMUD写机器人的方法。



DDE是一种动态数据交换机制(Dynamic Data Exchange,DDE),是一种已经被淘汰的技术,用C实现一个完整的dde功能并非易事,代码大量而且不易维护,在delphi6.0里写dde是最简单的,因为它有自己的dde控件,一两句代码就可以实现dde通信,whisper机器人里的server.exe就是某高手用delphi写的,我一般写程序用VC,但有时候用VB,就是为了某些时候方便,比如在写ZMUD的DDE机器人时,因为在VB6.0里,实现DDE功能也是很简单的,如果对DDE的基本概念还有疑问,我看到“百度知道”里有一个不错的简单解答,可以去看一下,下面我就结合一个例子讲一下:

首先我们知道ZMUD里的dde命令和函数有如下几个:
#DDE server topic item
%dde(server,topic,item)
%ddepoke(server,topic,item,value)
还有:
%ddeopen(server,topic)
%ddeclose
%ddemacro(server,topic,s)

后三个函数用于开关dde连接ddeopen/ddeclose,命令目标执行宏ddemacro,但前三个函数执行时会自动打开DDE连接,执行宏对我们意义不大,所以这里只用到前三个函数。

我们注意到所有的函数和命令都在使用三个参数:server、topic、item,其实很简单:server就是服务端的名字,也就是目标程序(比如whisper的server.exe)exe文件的名字,topic是内部定义的连接字,item嘛,可以理解为我们要存取的数据项,代表的是DDE的交互内存,我们可以往item里写数据,也可以从item里读数据。了解了这三个概念,理解下面这个例子就容易多了。

下面我们就来用VB6.0建立一个可与ZMUD通信的DDE服务程序:

首先建立一个标准exe工程,保存命名为dde1(因为VB生成exe文件是和工程同名的,所以这个也就是server名了),然后我们把默认的窗体当作基本的DDE源,设置其LinkMode属性为1-Source,其LinkTopic属性为ddeform(这个就是topic名了)。

现在我们有server有topic了,LinkMode也设置好了,我们已经可以用#DDE命令做一些事情了,
建立
Private Sub Form_LinkExecute(CmdStr As String, Cancel As Integer)

End Sub
事件响应,这个就是当在Zmud里用#DDE命令与程序通信时产生的LinkExecute事件的响应过程,#DDE命令的item参数就是传递给CmdStr,比如我们的代码如下:
Private Sub Form_LinkExecute(CmdStr As String, Cancel As Integer)
MsgBox CmdStr
End Sub
那么运行程序,当我们在Zmud里输入命令#DDE dde1 ddeform {对话框内容} ,那么程序就会弹出对话框,内容就是“对话框内容”。
一般这个响应过程是用来响应从ZMUD发过来的自定义命令的,一般建立一个select选择如:

Private Sub Form_LinkExecute(CmdStr As String, Cancel As Integer)

Select Case CmdStr
Case "Check"
'响应Check命令的代码
Case "End"
'响应End命令的代码
End Select

End Sub



下面来讲如何向服务程序读写数据:
同样很简单,在VB里,窗体里的所有TextBox控件都可以做为Item来使用,这里我们在窗体上添加一个TextBox控件,命名为Text1,这也是默认名字,那么当我们在Zmud里使用%ddepoke函数,如%ddepoke(dde1,ddeform,Text1,"看看Text1里的内容吧"),哈哈,再看程序里的Text1的Caption也就是文本属性变成“看看Text1里的内容吧”,一般建立一个Text1的Change事件响应,从Zmud到服务程序的数据传递并处理就实现了。当然你想建立多个item都可以,item名就是TextBox控件名。

然后类似,要从Text1得到其Caption属性,只要用%dde(dde1,ddeform,Text1),函数的返回值就是了。

这样,
#DDE server topic item                 向DDE服务程序发送自定义命令
%ddepoke(server,topic,item,value)      向DDE服务程序发送数据
%dde(server,topic,item)                从DDE服务程序回取数据

三大功能都实现了,呵呵,怎样编写ZMUD的DDE机器人,想必你已经胸有成竹了,去充分发挥你的创造力吧!




后记:
    ivy说只懂c和java,不懂VB,但前面说了用C写DDE对于我们这些只想写Zmud机器人的人来说,实在是得不偿失,我也没有研究过,C的教程实在写不出来。用delphi写我没试过,实在不行就学学Vb吧,很简单,我初中时就开始玩Basic了,我认为,编程语言精通一门过程语言,一门结构语言,再精通一门面向对象技术(其实面向对象可学可不学,我用过一年的C++,窃以为并不好用,又返回到用C+SDK的编程路子上来。)就足够了,其它的语言,看一眼手册马上就能触类旁通,起码就算没写过读起来不会有问题,因为其实所有高级语言,实在都是大同小异。
    还有一点,有亲身体验的人都知道,VB虽然封装度高,应用各种技术都很简便,但在数据计算和内存处理能力上却很欠缺,所以我一般都用VB写技术接口,用VC++6.0写一个dll处理数据计算部分,再引入到VB程序里来,不喜欢用VB写核心算法的话,不妨采用一下这种方法。

19:55 06-11-20

panenfeng,2006-11-20 20:55:28

高手,顶下
mics,2006-11-20 21:23:19

头晕中!!!!
ivy,2006-11-20 23:31:13

以前拿到server.exe时用language2000看过,记得是用delhpi写的,可惜对delphi只入门式的看了看,懂的不多。
对VB,唉,都没想到去学,一开始学C,后来学汇编,然后学C++和JAVA。现在再回去学下VB好了。

Je-Rock,2006-11-21 09:47:20

支持原创!
 97 1 8: 此主题共有5帖 此页5帖 每页12帖 

[查看完整模式]

LeadBBS 4.0 耗时0.004秒 query:2