Seite 1 von 1

Python -> DDE -> Visual-Basic

Verfasst: Mittwoch 31. Oktober 2007, 12:29
von integral
Hallo, ich versuche gerade ein Interface in Python für ein bestehendes VB-Programm zu schreiben.

in der Visual-Basic Applikation werden Daten über die LinkPoke Methode übertragen, als DDE-Server habe ich das pyWin32 Beispiel genommen.

Folgenden Code hab ich in VB geschrieben um denn Python DDE Server zu testen.

Beim aus führen von Linkexecute funktioniert alles wunderbar:

Code: Alles auswählen

SPS_Datenschreiben.LinkTopic = "RunAny|ComputeStringLength"
SPS_Datenschreiben.LinkItem = "Request"
SPS_Datenschreiben.LinkMode = 2
SPS_Datenschreiben.LinkExecute "1234"
Beim aus führen von LinkPoke allerdigs kommt immer folgende Meldung: 'Die Anwendung für die DDE Operation oder Methode nicht aus'

Code: Alles auswählen

SPS_Datenschreiben.LinkTopic = "RunAny|ComputeStringLength"
SPS_Datenschreiben.LinkItem = "Request"
SPS_Datenschreiben.LinkMode = 2
SPS_Datenschreiben.Text = "123"
SPS_Datenschreiben.LinkPoke
Ich vermute das in dem DDE Server Python-Script ein Handler fehlt, kenne mich aber mit DDE leider nicht so aus, währ super wenn jemand eine Idee hätte was fehlt :)

Code: Alles auswählen

# 'Request' example added jjk  11/20/98

import win32ui
from pywin.mfc import object
import dde

class MyOtherTopic(object.Object):
	def __init__(self, topicName):
		object.Object.__init__(self, dde.CreateTopic(topicName))
        print "init"

	def Exec(self, cmd):
		print "Other Topic asked to exec", cmd
		return cmd

server = dde.CreateServer()
server.AddTopic(MyOtherTopic("RunAnyCommand"))
server.Create('RunAny')

while 1:
	win32ui.PumpWaitingMessages(0, -1)

Re: Python -> DDE -> Visual-Basic

Verfasst: Mittwoch 31. Oktober 2007, 13:14
von gerold
integral hat geschrieben:DDE
[...]

Code: Alles auswählen

from pywin.mfc import object
Hallo integral!

Willkommen im Python-Forum!

Ich kann dir wahrscheinlich nicht helfen. Aber ein paar Gedanken habe ich doch dazu.

1.) DDE war schon zu meiner Visual Basic 5 Zeit ausgestorben und nur wirklich alt gewachsene Programme wurden nicht auf OLE umgestellt, weil es sich nicht rentierte.

2.) Du überschreibst das Python-Objekt ``object``. Das darf garantiert nicht sein. Besser du importierst ``pywin.mfc.object`` und verweist im Code auf den ganzen Namen. ``pywin.mfc.object.Object``.

Ob das was hilft, glaube ich nicht. DDE ist in sich so brüchig, dass ich mich nie damit befasst habe.

mfg
Gerold
:-)