List Info

Thread: problem with reference parameter to COM function (makepy)




problem with reference parameter to COM function (makepy)
user name
2006-06-05 19:34:12
Hi,

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.  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);

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
			)

(The COM object is some vendor thing--no source code and
probably poorly
implemented.)

Any ideas?

Mike


Mike Coleman, Scientific Programmer, +1 816 926 4419
Stowers Institute for Biomedical Research
1000 E. 50th St., Kansas City, MO  64110,  USA
_______________________________________________
Python-win32 mailing list
Python-win32python.org

http://mail.python.org/mailman/listinfo/python-win32
problem with reference parameter to COM function(makepy)
user name
2006-06-06 01:51:37
> 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
_______________________________________________
Python-win32 mailing list
Python-win32python.org

http://mail.python.org/mailman/listinfo/python-win32
[1-2]

about | contact  Other archives ( Real Estate discussion Medical topics )