passing an array of variant in vb to a python COM object = win32com bug ?
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Thu May 3 08:20:42 EDT 2007
En Thu, 03 May 2007 04:54:43 -0300, vml <victor.lebrun at gmail.com> escribió:
> I have a python com object which contains a method to inverse an array
> in vb 6 the definition of the class is :
>
> class Fop:
> _public_methods_ = [ 'SqVal' ]
> def SqVal(self,*val):
> #vol=(val[0][0],val[0][1])
> #mat1=mat((vol))
> #up=linalg.inv(mat1)
> return str(val)#up
> _reg_verprogid_ = "Python.Fop.3"
> _reg_progid_ = "Python.Fop"
> _reg_desc_ = "Python Fop"
> _reg_clsid_ = "{30BD3490-2632-11cf-AD5B-524153480001}"
>
> I pass to this method an array of variant which is the matrix to
> invert like that:
> vb6 code :
>
>
> Set obj = CreateObject("Python.Fop")
> Dim ty(1, 1) As Variant
>
> ty(0, 0) = 1
> ty(1, 0) = 2
> ty(0, 1) = 3
> ty(1, 1) = 4
>
> toto = obj.SqVal(ty)
>
>
> when I dispaly toto as str(val) I obtain the following tuple "(((1,
> 3), (2, 4)),)" which is not usable ....
>
> Do you have an idea to explain this strange behaviour ?
This is the expected behaviour. Writing it completely in Python:
py> def SqVal(*val):
... return str(val)
...
py> ty=((1,3),(2,4))
py> SqVal(ty)
'(((1, 3), (2, 4)),)'
The *val parameter receives a tuple, whose elements are the positional
arguments used when calling the function. As you call the function with a
single argument, val receives a tuple with a single element.
Perhaps you want to write it as:
py> def SqVal(val):
... print val[0][0]
... print val[0][1]
... print val[1][0]
... print val[1][1]
...
py> SqVal(ty)
1
3
2
4
(Of course, if used as a Fop method, dont forget the "self" parameter)
--
Gabriel Genellina
More information about the Python-list
mailing list