im Zusammenhang mit der COM Schnittstelle der Telefonsoftware Phoner, habe ich folgende
Antwort bekommen:
Code: Alles auswählen
Versuche dir einfach die OnChangeState-Funktion als Callback Function vorzustellen.
So nach dem Motto: "Wenn du mir was zu sagen hast, dann rufe doch die Funktion, welche ich dir hier übergebe".
Natürlich muss die Funktionsdeklaration übereinstimmen.
und weiss nicht, wie ich die in Python deklariere und anwende.
Die oben zitierte 'OnChangeState(CallID)' Funktion ist eine Event-Funktion des COM-Servers der Software.
Den kann ich zwar ansprechen, aber die Eventfunktion will mir ihre Ergebnisse über Phoner.CPhoner.OnChangeState(CallID)
nicht übermitteln. Wie ginge der Aufruf mittels eines Callbacks ?
Habe im Wiki über Callback Funktionen nachgelesen, aber alles was ich verstanden habe ist, daß die Callback Funktion einer anderen Funktion als Parameter übergeben wird. Das hieße in meinem Fall, daß ich eine eigene Funktion 'OnChangState()' schreibe und ihr als Parameter 'Phoner.CPhoner.OnChangeState' übergebe ? Das führt aber zu einem Attribut Error.
Code: Alles auswählen
def OnChangeState(CallID):
StateString = ""
CallerIDString = ""
CalledIDString = ""
phon.GetState(CallID, StateString)
phon.GetCallerID(CallID, CallerIDString)
phon.GetCalledID(CallID, CalledIDString)
return CallID
phon = win32com.client.Dispatch("Phoner.CPhoner")
print OnChangeState(phon.OnChangeState)
Code: Alles auswählen
File "C:\Programme\Python24\Lib\site-packages\win32com\client\dynamic.py", line 489, in __getattr__
raise AttributeError, "%s.%s" % (self._username_, attr)
AttributeError: Phoner.CPhoner.OnChangeState