vb.net编写DDE(Dynamic Data Exchange)服务器

  • 编写DDE(Dynamic Data Exchange)服务器可以实现在VB(Visual Basic)中与其他应用程序进行数据交换。下面是一些编写DDE服务器的基本步骤:
    *

    1. 引用必要的库文件

      在VB中,首先需要引用Microsoft.VisualBasic命名空间,以及Microsoft.VisualBasic.DDE命名空间,以便使用相关的类和方法。

    2. 创建并配置DDE服务器对象

      使用Microsoft.VisualBasic.DDE命名空间中的DdeServer类,可以创建DDE服务器对象。在创建对象之后,需要对服务器对象进行一些基本的配置,如设置服务器名称和主题。

    3. 添加处理程序并响应DDE请求

      使用DdeServer对象的AddTopic方法,可以向服务器添加主题,并指定主题的名称和请求处理程序。请求处理程序是当DDE客户端发送请求时,服务器对请求进行响应的代码块。

    4. 编写处理程序的逻辑

      在请求处理程序中,可以编写相应的逻辑代码来处理DDE请求。根据不同的请求类型,可以执行不同的操作,如读取数据、写入数据或执行特定的功能。

    5. 启动DDE服务器

      使用DdeServer对象的Start方法,可以启动DDE服务器,使其开始监听来自DDE客户端的请求。

    6. 监听和处理DDE请求

      在服务器启动后,可以使用DdeServer对象的DoEvents方法来监听和处理来自DDE客户端的请求。这个方法会在执行期间不断轮询请求,并将其分发给相应的主题和请求处理程序。

    7. 响应并发送数据

      在请求处理程序中,可以通过DdeServer对象的Advise、Execute和Poke方法来响应并发送数据给DDE客户端。这些方法可以用来读取、写入和执行数据操作。

    8. 停止DDE服务器

      当DDE服务不再需要时,可以使用DdeServer对象的Stop方法来停止服务器。

    注意事项:

    在编写DDE服务器时,需要考虑服务器的稳定性和安全性。建议对数据的读取和写入进行合适的验证和保护,以防止非法操作和数据泄漏。

    总结:

    通过上述步骤,可以用VB编写DDE服务器,实现与其他应用程序之间的数据交换和通信。编写DDE服务器需要清晰的逻辑思维和熟练的编程技巧,同时还需要对DDE协议和相关API的理解。

    赞同1年前0条评论
    *

    飞飞

    Worktile&PingCode市场小伙伴

    如何用VB编写DDE服务器

    1. 了解DDE(动态数据交换):DDE是一种Windows操作系统中用于在不同应用程序之间传递数据的机制。DDE服务器允许其他应用程序通过DDE进行数据交换。在开始编写DDE服务器之前,首先要了解DDE的基本概念和工作原理。

    2. 创建一个VB项目:在Visual Basic中,创建一个新的VB项目作为DDE服务器的容器。在VB的开发环境中,选择"标准EXE"项目模板,然后点击"确定"以创建新项目。

    3. 添加DDE代码:在VB的代码编辑器中,编写DDE服务器的代码。首先,需要引入DDE库文件。在代码的头部,添加以下代码行:

      复制代码
      Imports System.Windows.Forms
      Imports System.Runtime.InteropServices
      
      Public Class Form1
          Inherits System.Windows.Forms.Form

      接下来,在代码的类中,添加以下DDE相关的函数和变量:

      复制代码
      Dim hConv As Integer
      Dim hSzItem As Integer
      Dim hConvList As Integer
      
      <DllImport("user32.dll", EntryPoint:="DdeInitializeA")> 
      Public Shared Function DdeInitialize(ByVal pidInst As Integer, ByVal pfncb As Integer, ByVal afCmd As Integer, ByVal ulRes As Integer) As Integer
      End Function
      
      <DllImport("user32.dll", EntryPoint:="DdeUninitializeA")> 
      Public Shared Function DdeUninitialize(ByVal idInst As Integer) As Integer
      End Function
      
      <DllImport("user32.dll", EntryPoint:="DdeCreateStringHandleA")> 
      Public Shared Function DdeCreateStringHandle(ByVal idInst As Integer, ByVal psz As String, ByVal iCodePage As Integer) As Integer
      End Function
      
      <DllImport("user32.dll", EntryPoint:="DdeConnect")> 
      Public Shared Function DdeConnect(ByVal idInst As Integer, ByVal hszService As Integer, ByVal hszTopic As Integer, ByVal pCC As IntPtr) As Integer
      End Function
      
      <DllImport("user32.dll", EntryPoint:="DdeDisconnect")> 
      Public Shared Function DdeDisconnect(ByVal hConv As Integer) As Integer
      End Function
      
      <DllImport("user32.dll", EntryPoint:="DdeClientTransaction")> 
      Public Shared Function DdeClientTransaction(ByVal pData As IntPtr, ByVal cbData As Integer, ByVal hConv As Integer, ByVal hszItem As Integer, ByVal wFmt As Integer, ByVal wType As Integer, ByVal dwTimeout As Integer, ByRef pdwResult As Integer) As IntPtr
      End Function
      
      <DllImport("user32.dll", EntryPoint:="DdeFreeStringHandle")>
      Public Shared Function DdeFreeStringHandle(ByVal idInst As Integer, ByVal hsz As Integer) As Boolean
      End Function
      
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
          Dim idInst As Integer
          idInst = DdeInitialize(0, 0, 0, 0) ' 初始化DDE库
      End Sub
      
      Private Sub Form1_Closed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Closed
          DdeUninitialize(idInst) ' 关闭DDE库
      End Sub

      上述代码中,DdeInitialize()函数用于初始化DDE库,DdeUninitialize()函数用于关闭DDE库。DdeCreateStringHandle()函数用于创建一个DDE字符串句柄,DdeConnect()函数用于建立与DDE服务的连接,DdeDisconnect()函数用于断开与DDE服务的连接,DdeClientTransaction()函数用于向DDE服务请求数据。最后,DdeFreeStringHandle()函数用于释放已经创建的DDE字符串句柄。

    4. 处理DDE消息:在VB代码中添加一个函数(Sub)来处理DDE消息。在这个函数中,根据接收的DDE消息进行相应的数据处理和回应。例如,可以使用HandleDDEMessage()函数来处理收到的DDE消息:

      复制代码
      Protected Overrides Sub WndProc(ByRef m As Message)
          If m.Msg = WM_DDE_ACK Then
              Dim idInst As Integer = 0
              Dim hszSvc As Integer = DdeCreateStringHandle(idInst, "MyDdeService", 0)
              Dim hszTopic As Integer = DdeCreateStringHandle(idInst, "MyDdeTopic", 0)
              hConv = DdeConnect(idInst, hszSvc, hszTopic, IntPtr.Zero)
              DdeFreeStringHandle(idInst, hszSvc)
              DdeFreeStringHandle(idInst, hszTopic)
          End If
      
          If m.Msg = WM_DDE_EXECUTE Then
              Dim sData As String = Marshal.PtrToStringUni(m.LParam)
              ' 进行数据处理
              ' ...
      
              ' 返回数据
              Dim pData As IntPtr = Marshal.StringToHGlobalUni("Response Data")
              Dim cbData As Integer = Encoding.Unicode.GetBytes("Response Data").Length + 2
              Dim pdwResult As Integer = 0
              Dim pResult As IntPtr = DdeClientTransaction(pData, cbData, hConv, hSzItem, CF_UNICODETEXT, XTYP_EXECUTE, DEFAULT_TIMEOUT, pdwResult)
              Marshal.FreeHGlobal(pData)
          End If
      
          MyBase.WndProc(m)
      End Sub

      上述代码中,HandleDDEMessage()函数首先判断收到的DDE消息是否为WM_DDE_ACK消息(表示与DDE服务建立连接的确认消息),如果是,则通过调用DdeConnect()函数建立与DDE服务的连接。然后,判断收到的DDE消息是否为WM_DDE_EXECUTE消息(表示执行DDE命令的消息),如果是,则进行数据处理并返回数据。

    5. 编写DDE服务器的其他功能:根据需要,可以添加其他功能到DDE服务器中。例如,可以添加一个按钮用于启动DDE服务器,添加一个文本框用于显示接收的DDE消息等。根据具体需求,通过VB的图形界面和事件编程来实现这些功能。

    以上是使用VB编写DDE服务器的基本步骤和关键代码片段。编写DDE服务器需要理解DDE的特性和工作原理,并掌握相应的编程技巧。编写完整的DDE服务器还需要进行更多的代码编写和测试工作,以满足具体的需求和实际的应用场景。

    赞同1年前0条评论
    *

    worktile

    Worktile官方账号

    使用VB编写DDE(动态数据交换)服务器的步骤如下:

    1. 创建一个新的VB项目

      打开Visual Studio并选择创建新的VB项目。在弹出窗口中选择"Windows Forms Application"。

    2. 添加一个DDE服务器控件

      在"工具箱"中找到DDE控件。选择并将其拖到窗体上。

    3. 设置DDE服务器属性

      在窗体的属性窗口中,找到DDE控件并设置以下属性:

      • DdeServer控件的Name属性:设置DDE服务器的名称,可以自定义。
      • DdeServer控件的ServiceName属性:设置DDE服务的名称,也可以自定义。
    4. 添加事件处理程序

      选择DDE服务器控件并在属性窗口的"事件"标签中找到相应的事件(例如Advise、Poke、Request等)。选择这些事件并双击以添加对应的事件处理程序。

    5. 编写DDE服务器代码

      在事件处理程序中编写DDE服务器的逻辑代码。以下是一些常见的DDE事件和相应的代码示例:

    • Advise事件:在此事件中,DDE客户端将请求订阅特定的DDE项。在事件处理程序中,您可以指定要发送给客户端的数据。例如:

      Private Sub ddeServer_Advise(ByVal sender As System.Object, ByVal e As AxMSDDELib._DDDEServerEvents_AdviseEvent) Handles ddeServer.Advise
      ' 客户端订阅的DDE项
      Dim item As String = e.item
      ' 通知客户端的数据
      Dim data As String = "这是一条DDE数据"

      复制代码
        ' 发送数据给客户端
        ddeServer.Unadvise("", item) '取消先前的订阅
        ddeServer.Advise("", item, data)

      End Sub

    • Poke事件:在此事件中,DDE客户端将请求向DDE项写入数据。在事件处理程序中,您可以读取该数据并做出相应的处理。例如:

      Private Sub ddeServer_Poke(ByVal sender As System.Object, ByVal e As AxMSDDELib._DDDEServerEvents_PokeEvent) Handles ddeServer.Poke
      ' 客户端写入DDE项的数据
      Dim data As String = e.data

      复制代码
        ' 处理接收到的数据
        ' ...

      End Sub

    • Request事件:在此事件中,DDE客户端将请求读取DDE项的数据。在事件处理程序中,您可以返回要发送给客户端的数据。例如:

      Private Sub ddeServer_Request(ByVal sender As System.Object, ByVal e As AxMSDDELib._DDDEServerEvents_RequestEvent) Handles ddeServer.Request
      ' 客户端请求的DDE项
      Dim item As String = e.item

      复制代码
        ' 返回给客户端的数据
        Dim data As String = "这是一条DDE数据"
      
        ' 发送数据给客户端
        ddeServer.Poke("", item, data)

      End Sub

    以上是常用的一些事件处理程序,您可以根据具体的业务需求添加其他DDE事件和相应的代码。

    1. 构建和调试
      点击Visual Studio工具栏上的"生成"按钮进行构建,并调试您的DDE服务器。您可以在调试过程中测试和验证DDE功能。

    通过以上步骤,您就可以使用VB编写一个简单的DDE服务器。根据您的需求,您可以进一步扩展和改进代码来实现更多功能。

相关推荐
wanhengidc3 分钟前
服务器的安全性如何?
运维·服务器·安全·游戏·智能手机
taxunjishu6 分钟前
DeviceNet 转 MODBUS TCP:倍福 CX 系列 PLC 与 MES 系统在 SMT 回流焊温度曲线监控的通讯配置案例
运维·人工智能·物联网·自动化·区块链
王嘉俊92516 分钟前
DevOps 与 部署入门:加速软件交付与运维的实践指南
运维·devops
DARLING Zero two♡19 分钟前
【Linux操作系统】简学深悟启示录:进程间通信
linux·运维·服务器
半梦半醒*20 分钟前
gitlab部署
linux·运维·centos·ssh·gitlab·jenkins
TG_yunshuguoji1 小时前
阿里云国际代理:阿里云备份如何保障数据安全?
运维·阿里云·云计算
全栈小51 小时前
【代码管理】在本地使用github和gitee之后,可能存在冲突,导致再次提交代码时提示Couldn‘t connect to server
gitee·github·代码管理工具
NocoBase1 小时前
11 个在 GitHub 上最受欢迎的开源无代码 AI 工具
低代码·ai·开源·github·无代码·ai agent·airtable·内部工具·app builder
KKKlucifer2 小时前
自动化漏洞利用技术颠覆传统:微软生态暴露的攻防新变局
运维·microsoft·自动化
此心光明事上练2 小时前
大厂级企业后端:配置变更与缓存失效的自动化处理方案
运维·缓存·自动化