1

説明のある COM API からイベントを取得する必要があります。

HRESULT OnStatusMessage(
    [in] IDispatch* pStatusMessage
);

また、IStatusMessage には、BSTR の説明、LONG コードなどのプロパティがあります。

私のコードは動作しません:

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.

この属性を取得できないのはなぜですか?

4

1 に答える 1

3

ここで答えを見つけました:

このオブジェクトをディスパッチする必要があります:

message = Dispatch(s)
print 'method OnStatusMessage', str(message.Description)

インポートすることを忘れないでくださいDispatch

from win32com.client import Dispatch
于 2012-09-14T12:01:22.910 に答える