COM server being passed an instance of an interface

Phil pruggera at san.rr.com
Fri May 21 15:41:11 EDT 2004


I am using a Pascal like language (Wealth-Lab) on W2K and call this server:

class HelloWorld:
    _reg_clsid_ = "{4E797C6A-5969-402F-8101-9C95453CF8F6}"
    _reg_desc_ = "Python Test COM Server"
    _reg_progid_ = "Python.TestServer"
    _public_methods_ = ['Hello']
    _public_attrs_ = ['softspace', 'noCalls']
    _readonly_attrs_ = ['noCalls']

    def __init__(self):
        self.softspace = 1
        self.noCalls = 0

    def Hello(self, WL ):  # WL is an instance of a interface class that
exists in the client
#       In VB this would look like Public Sub Hello(ByVal objWL As
WealthLab.IWealthLabAddOn3)
        self.noCalls = self.noCalls + 1
        # insert "softspace" number of spaces
        return "Hello" + " " * self.softspace + str(self.noCalls) +
str(WL.BarCount())

if __name__=='__main__':
    import win32com.server.register
    win32com.server.register.UseCommandLine(HelloWorld)

How do I get the instance of the interface to have its methods?  The Python
Trace Collector gives me:

Object with win32trace dispatcher created (object=None)
in _GetIDsOfNames_ with '('Hello',)' and '2048'

in _Invoke_ with 1002 0 3 (<PyIDispatch at 0x3c5efc4 with obj at 0x331ea00>)
Traceback (most recent call last):
  File "C:\Python23\Lib\site-packages\win32com\server\dispatcher.py", line
40, in _Invoke_
    return self.policy._Invoke_(dispid, lcid, wFlags, args)
  File "C:\Python23\Lib\site-packages\win32com\server\policy.py", line 283,
in _Invoke_
    return self._invoke_(dispid, lcid, wFlags, args)
  File "C:\Python23\Lib\site-packages\win32com\server\policy.py", line 288,
in _invoke_
    return S_OK, -1, self._invokeex_(dispid, lcid, wFlags, args, None, None)
  File "C:\Python23\Lib\site-packages\win32com\server\policy.py", line 550,
in _invokeex_
    return func(*args)
  File "G:\Python\Dev\COM Server - win.py", line 27, in Hello
    return "Hello" + " " * self.softspace + str(self.noCalls) +
str(WL.BarCount())
AttributeError: 'PyIDispatch' object has no attribute 'BarCount'
pythoncom error: Python error invoking COM method.
Traceback (most recent call last):
  File "C:\Python23\Lib\site-packages\win32com\server\dispatcher.py", line
129, in _Invoke_
    return DispatcherBase._Invoke_(self, dispid, lcid, wFlags, args)
  File "C:\Python23\Lib\site-packages\win32com\server\dispatcher.py", line
42, in _Invoke_
    self._HandleException_()
  File "C:\Python23\Lib\site-packages\win32com\server\dispatcher.py", line
107, in _HandleException_
    reraise()
  File "C:\Python23\Lib\site-packages\win32com\server\dispatcher.py", line
40, in _Invoke_
    return self.policy._Invoke_(dispid, lcid, wFlags, args)
  File "C:\Python23\Lib\site-packages\win32com\server\policy.py", line 283,
in _Invoke_
    return self._invoke_(dispid, lcid, wFlags, args)
  File "C:\Python23\Lib\site-packages\win32com\server\policy.py", line 288,
in _invoke_
    return S_OK, -1, self._invokeex_(dispid, lcid, wFlags, args, None, None)
  File "C:\Python23\Lib\site-packages\win32com\server\policy.py", line 550,
in _invokeex_
    return func(*args)
  File "G:\Python\Dev\COM Server - win.py", line 27, in Hello
    return "Hello" + " " * self.softspace + str(self.noCalls) +
str(WL.BarCount())
exceptions.AttributeError: 'PyIDispatch' object has no attribute 'BarCount'
in _Invoke_ with 0 1024 2 ()
in _Invoke_ with 0 1024 2 ()





More information about the Python-list mailing list