> I'm trying to use win32com to drive a COM object. I ran makepy to > create the interface and am (apparently) able to run some of the > object's functions. I'm having problem, though, with functions that > have reference parameters (e.g., pointer to bool). > > I saw in some documentation (on oreilly.com) that makepy was > supposed to > arrange things so that these returned values are returned as a tuple > from the function, but that seems not to have happened in > this case.
That is true in most cases - but its not obvious from the makepy generated file - did you actually call the function? > Is there something I can do to force this? Or, am I doing something else > wrong? > > Here's the documented signature: > > long IsError(BOOL FAR* pbIsError); Its not clear what the true IDL signature is for the function. If the long is actually the HRESULT, then pywin32 will *not* return that value (but will instead throw an exception if a failure code is returned). Indeed, this is what I believe is happening... > and here's what makepy generated: > > def IsError(self, pbIsError=defaultNamedNotOptArg): > """method IsError""" > return self._oleobj_.InvokeTypes(7, LCID, 1, (24, 0), > ((16387, 0),),pbIsError > ) makepy has decided the return value from the function is VT_VOID (the 24). As a result, pywin32 considers this function to have only 1 return value - so a tuple will *not* be returned - just 'pbIsError' (if the function fails, an exception is thrown - hence the 'long' is not considered a return value as such.) I also note that the first param appears to be missing the [out] qualifer in the IDL (reflected in the second tuple item being 0). If the single value you get returned is always None, that will be the reason. I'm afraid I can't recall exactly what pywin32 will do in such a case. Hope this helps... Mark
<<attachment: winmail.dat>>
_______________________________________________ Python-win32 mailing list Python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32