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服务器。根据您的需求,您可以进一步扩展和改进代码来实现更多功能。

相关推荐
qq_377572773 小时前
github repository 一个文件忘记添加到 .gitignore
github
Clownseven3 小时前
如何用Fail2ban保护Linux服务器?防止SSH暴力破解教程
linux·服务器·ssh
方圆想当图灵3 小时前
深入浅出 gRPC
java·后端·github
chaofan9803 小时前
如何用 Claude Code 搭建安全、可测、可自动化的 GitHub CI 流程?
运维·人工智能·ci/cd·ai·自动化·github·claude
无敌最俊朗@3 小时前
Linux 进程创建与控制详解
linux·运维·服务器
迎風吹頭髮4 小时前
UNIX下C语言编程与实践8-UNIX 静态库原理与创建:ar 命令的使用与静态库调用全流程
服务器·c语言·unix
jieyu11194 小时前
入侵检测系统(IDS)和入侵防御系统(IPS)
运维·服务器·系统安全
小白银子4 小时前
零基础从头教学Linux(Day 43)
linux·运维·服务器·nginx
ITsheng_ge4 小时前
GitHub Pages 部署静态网站流程、常见问题以及解决方案
前端·github·持续部署