On 12/06/2009 6:58 AM, Hibiki Kanzaki wrote:
I am using a COM library from Python.  The methods
have OUT parameters, so I am using the gencache/makepy
facility of win32com.  When it generates the wrapper
files, there are function definitions like this one
(this is for accessing Visual SourceSafe COM Automation)

        # Result is of type IVSSItem
        # The method VSSItem is actually a property, but must be used as a
method to correctly pass the arguments
        def VSSItem(self, Spec=defaultNamedNotOptArg, Deleted=False):
                ret = self._oleobj_.InvokeTypes(6, LCID, 2, (9, 0), ((8, 1), 
(11, 49)),Spec
                        , Deleted, ppIVSSItem)
                if ret is not None:
                        ret = Dispatch(ret, u'VSSItem', 
'{2A0DE0E7-2E9F-11D0-9236-00AA00A1EB95}')
                return ret

Thanks for the detailed report and analysis. Sadly I can't reproduce this problem. I even found the IDL for VSSItem at http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.sourcesafe.interop.ivssdatabase.vssitem(VS.80).aspx and added the same IDL to the test suite (which already had something *very* close), but it works fine.


In that same module you mentioned, _BuildArgList() is reponsible for that extra name:

def _BuildArgList(fdesc, names):
    "Builds list of args to the underlying Invoke method."
    # Word has TypeInfo for Insert() method, but says "no args"
    numArgs = max(fdesc[6], len(fdesc[2]))
...

but what should be happening is that 'ppIVSSItem' should not appear in the list of 'names' at all - it is a return value. It should also not appear in 'fdesc[6]' (a list of tuples, one for each arg) and it isn't - the generated code you pasted shows fdesc[6] is '((8, 1), (11, 49))', so correctly has only 2 args.

after lots of going around in circles, I suspect that last line above is the problem: if you change that to simply:

    numArgs = len(fdesc[2])

does the problem go away? I'm not sure that is the correct solution in all cases, but it would be good to know how it works in this case...

Cheers,

Mark
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to