Вызов метода из PyIDispatch
Я должен получить событие от COM API, который имеет описание:
HRESULT OnStatusMessage(
[in] IDispatch* pStatusMessage
);
И IStatusMessage имеет свойства: описание BSTR, длинный код и т. Д.
Мой код не работает:
import msvcrt
import pythoncom
from win32com.client import DispatchWithEvents
class evt(object):
def OnConnectionLost(self):
print 'method ConnectionLost'
def OnStatusMessage(self, s):
print 'method OnStatusMessage: ' + str(s.Description)
def OnLogin(self, l):
print 'method OnLogin:', l
def OnMessage(self, msg):
print 'method OnMessage'
session = DispatchWithEvents("NiApi.SrvrSession", evt)
# login settings....
session.Connect()
while 1:
if msvcrt.kbhit():
msvcrt.getch()
session.Disconnect()
break
pythoncom.PumpWaitingMessages()
Модуль завершается с трассировкой:
Traceback (most recent call last):
File "C:\Python\AP_272\lib\site-packages\win32com\server\policy.py", line 277, in _Invoke_
return self._invoke_(dispid, lcid, wFlags, args)
File "C:\Python\AP_272\lib\site-packages\win32com\server\policy.py", line 282, in _invoke_
return S_OK, -1, self._invokeex_(dispid, lcid, wFlags, args, None, None)
File "C:\Python\AP_272\lib\site-packages\win32com\server\policy.py", line 585, in _invokeex_
return func(*args)
File "d:\niapi.py", line 13, in OnStatusMessage
print 'method OnStatusMessage' + str(s.Description)
AttributeError: 'PyIDispatch' object has no attribute 'Description'
pythoncom error: Python error invoking COM method.
Почему я не могу получить этот атрибут?
1 ответ
Решение
Я нашел ответ здесь:
Необходимо отправить этот объект:
message = Dispatch(s)
print 'method OnStatusMessage', str(message.Description)
И не забудьте импортировать Dispatch
from win32com.client import Dispatch