[python-win32] Passing Nothing into COM method

shivisi shivisi at nana10.co.il
Wed Oct 14 10:00:52 CEST 2009


I am writing a COM addin, and attempting to trap the ItemAdded/ItemRemoved event in the following object:
Application.VBE.Events.ReferencesEvents
which is retrieved by passing Nothing as a paramter:
Application.VBE.Events.ReferencesEvents(Nothing)

Tim Golden wrote in the following post (http://mail.python.org/pipermail/python-win32/2009-February/008826.html) that pythoncom.Empty can be used for Nothing. However, when trying this:

try:
    self.comRefevents=self.app.VBE.Events.ReferencesEvents(pythoncom.Empty)
except pythoncom.com_error, (hr, msg, exc, arg):
    print "The call failed with code %d: %s" % (hr, msg)
        if exc is None:
            print "There is no extended error information"
        else:
            wcode, source, text, helpFile, helpId, scode = exc
            print "The source of the error is", source
            print "The error message is", text
            print "More info can be found in %s (id=%d)" % (helpFile, helpId)

I get back the following (the same as if I had passed no arguments at all):

The call failed with code -2147352561: Parameter not optional.
There is no extended error information

Eric Lippert states in his blog (http://blogs.msdn.com/ericlippert/archive/2004/07/14/183241.aspx):
> A common alternative to passing a missing argument is to pass Nothing, Null, or Empty in VBScript, 
> null or undefined in JScript.  Null and null pass VT_NULL, Empty and undefined pass VT_EMPTY, and 
> Nothing passes a VT_DISPATCH with no value dispatch object pointer.
It would seem that VB's Nothing and Empty are two different things.

If I try passing pythoncom.VT_DISPATCH, then I get the following traceback:

-----------------------------------------------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Python26\lib\site-packages\win32com\universal.py", line 177, in dispatch
    retVal = ob._InvokeEx_(meth.dispid, 0, meth.invkind, args, None, None)
  File "C:\Python26\lib\site-packages\win32com\server\policy.py", line 324, in _InvokeEx_
    return self._invokeex_(dispid, lcid, wFlags, args, kwargs, serviceProvider)
  File "C:\Python26\lib\site-packages\win32com\server\policy.py", line 649, in _invokeex_
    return DesignatedWrapPolicy._invokeex_( self, dispid, lcid, wFlags, args, kwArgs, serviceProvider)
  File "C:\Python26\lib\site-packages\win32com\server\policy.py", line 585, in _invokeex_
    return func(*args)
  File "C:\Documents and Settings\ABG7\My Documents\Zevi\Python-COMAddin\VBACodeRepository.py", line 104, in OnConnection
    self.comRefevents=self.app.VBE.Events.ReferencesEvents(pythoncom.VT_DISPATCH)
  File "C:\Python26\lib\site-packages\win32com\gen_py\0002E157-0000-0000-C000-000000000046x0x5x3.py", line 145, in ReferencesEvents
    ret = self._oleobj_.InvokeTypes(202, LCID, 2, (13, 0), ((13, 1),),VBProject
TypeError: The Python instance can not be converted to a COM object
pythoncom error: Unexpected gateway error

Traceback (most recent call last):
  File "C:\Python26\lib\site-packages\win32com\universal.py", line 177, in dispatch
    retVal = ob._InvokeEx_(meth.dispid, 0, meth.invkind, args, None, None)
  File "C:\Python26\lib\site-packages\win32com\server\policy.py", line 324, in _InvokeEx_
    return self._invokeex_(dispid, lcid, wFlags, args, kwargs, serviceProvider)
  File "C:\Python26\lib\site-packages\win32com\server\policy.py", line 649, in _invokeex_
    return DesignatedWrapPolicy._invokeex_( self, dispid, lcid, wFlags, args, kwArgs, serviceProvider)
  File "C:\Python26\lib\site-packages\win32com\server\policy.py", line 585, in _invokeex_
    return func(*args)
  File "C:\Documents and Settings\ABG7\My Documents\Python-COMAddin\VBACodeRepository.py", line 104, in OnConnection
    self.comRefevents=self.app.VBE.Events.ReferencesEvents(pythoncom.VT_DISPATCH)
  File "C:\Python26\lib\site-packages\win32com\gen_py\0002E157-0000-0000-C000-000000000046x0x5x3.py", line 145, in ReferencesEvents
    ret = self._oleobj_.InvokeTypes(202, LCID, 2, (13, 0), ((13, 1),),VBProject
TypeError: The Python instance can not be converted to a COM object
-----------------------------------------------------------------------------------------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-win32/attachments/20091014/1a72072e/attachment.htm>


More information about the python-win32 mailing list