[python-win32] type mismatch using win32com.client.GetObject

Tim Roberts timr at probo.com
Fri Sep 28 21:01:49 CEST 2007


David wrote:
> So I have a Visual Basic script in Excel which connects via com to
> programX and retrieves data. The COM function takes 7 required
> arguments. arg1-6 are set equal to values to determine what data to
> fetch. arg7 is the variant in which the function returns the fetched
> data.
> ...
> The end of which the variable 'data' is set to the value returned by
> the com interface.
> So when I call the function, I get:
>
> arg1 = ...
> setting all arg# variables
> ...
> x1 = functionX(arg1, arg2, arg3, arg4, arg5, arg6)
>
> and x1 = the returned value
>
> When I try this in python, I get a type mismatch, for the apparent
> reason that arg7 is not a variant. Of course, python being the
> wonderful language it is, arg7 can be any type I want, whenever I want
> to change it.... except there is no 'variant' type because of this.
> >>> arg1 = ....
> setting all arg# variables
> ...
> >>> x1 = win32com.client.GetObject("programX.activex.interface ")
> >>> `x1`
> '<COMObject programX.activex.interface>'
> >>> x1.FunctionX(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9,
> arg10)
> Traceback (most recent call last):
>   File "<interactive input>", line 1, in <module>
>   File "<COMObject programX.activex.interface >", line 2, in FunctionX
> com_error: (-2147352571, 'Type mismatch.', None, 7)
> >>>
>
> So I'm at a loss as to how to force passing arg7 as a variant type.
> From what I gather in researching this, win32com.client is supposed to
> handle typing automagically. Somehow I'm missing something.

If arg7 is the output argument, then you probably want:

   arg7 = x1.FunctionX(arg1, arg2, arg3, arg4, arg5, arg6, arg8, arg9,
arg10)

I'm not sure if it will handle functions where the output argument is
not the final argument.

-- 
Tim Roberts, timr at probo.com
Providenza & Boekelheide, Inc.



More information about the python-win32 mailing list