首页 > 解决方案 > 如何让 DDE 服务器在 python 3 中工作?

问题描述

2015 年,我发布了一个关于如何在 python 中创建 DDE 服务器并连续发送数据的问题。JayleoPlayGround 对那个问题发布的答案和代码当时在 python 2.7 中完美运行,直到最近我才使用它。

由于从 2020 年 1 月起不再积极支持 Python 2,我想将我的代码移至 python 3。我在 python 3.7.6 上使用 pip 安装了 pywin32(版本 227)并尝试使用与以前相同的代码:

# coded by JayleoPlayGround
# use Portable Python 2.7.5.1 + pywin32-214

import time
import win32ui, dde
from pywin.mfc import object


class DDETopic(object.Object):
    def __init__(self, topicName):
        self.topic = dde.CreateTopic(topicName)
        object.Object.__init__(self, self.topic)
        self.items = {}

    def setData(self, itemName, value):
        try:
            self.items[itemName].SetData( str(value) )
        except KeyError:
            if itemName not in self.items:
                self.items[itemName] = dde.CreateStringItem(itemName)
                self.topic.AddItem( self.items[itemName] )
                self.items[itemName].SetData( str(value) )


ddeServer = dde.CreateServer()
ddeServer.Create('Orbitron')
ddeTopic = DDETopic('Tracking')
ddeServer.AddTopic(ddeTopic)

while True:
    yourData = time.ctime() + ' UP0 DN145000001 UMusb DMfm AZ040 EL005 SNNO SATELLITE'
    ddeTopic.setData('Tracking', yourData)
    win32ui.PumpWaitingMessages(0, -1)
    time.sleep(0.1)

在 python 3.7.6 中运行上述代码并使用 pywin32(版本 227)时,我与之交互的外部 DDE 客户端应用程序能够连接到 DDE 服务器,但未正确接收数据字符串。如前所述,如果我将 Python 2.7 与 pywin32(版本 214)一起使用,则可以正常工作。

由于没有显示错误消息,我迷失了 python 3 下的问题。我尝试了这个 python 版本(222 到 227)的所有可用 pywin32 版本,但没有成功。任何关于如何使其工作的想法将不胜感激。

标签: pythonpywin32dde

解决方案


推荐阅读