Controling types in PythonCOM

Mark Hammond MarkH at ActiveState.com
Wed Feb 14 00:05:15 CET 2001


pfenn at mmm.com wrote:


> I'm working with an ill behaved type library, where the ODL for a function
> specifies a variant integer, but by mucking around in Visual C++, I've
> determined that the function really needs a VT_I2.  It appears that
> PythonCOM is attempting to pass a VT_I4 which causes an exception.  I am
> using the makepy generated  interface, and to make sure I'm doing this
> right, I'll show my code:

Well that object sucks :)  It should be capable of pulling an int out of any of the variant integer types.

> from win32com.client import Dispatch
> xrf = Dispatch('XRaw.Xraw.1')  # Invoked non-dynamically, right?

Assuming you have makepy pre-generated, yes.

> This is the makepy generated interface for the problem function.  I tried
> changing that first (12,17) to a (2,0) after looking at some functions that
> did have shorts for parameters but that didn't help.

The 12 means VT_VARIANT.  The 17 is PARAMFLAG_FOPT | PARAMFLAG_FIN

So you probably should change it to (2,1) - ie (VT_I2, PARAMFLAG_FIN).  You can't specificy FTOPT with a non variant arg.

By passing (2,0) you _may_ have ended up with a byref int (as some code that sees no flags (ie, 0) gets conservative.)

> com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0,
> -2147473646), None)

This is certainly the COM object itself raising the error, not Python.

Mark.

-- 
Nominate Your Favorite Programmers
for the Perl and Python Active Awards!
http://www.ActiveState.com/Awards/




More information about the Python-list mailing list