On 3 mai, 14:20, "Gabriel Genellina" <[EMAIL PROTECTED]> wrote: > En Thu, 03 May 2007 04:54:43 -0300, vml <[EMAIL PROTECTED]> 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
I just tried to replace the *val by SqVal(self,val) and call the method in vb but it crashes down : "when refilling safe array the sequence must have the same number of dimension as the existing array" my python code is now : def SqVal(self,val): ## volr=[val[0][0][i] for i in range(size(val,2))] ## voli=[val[0][1][i] for i in range(size(val,2))] ## mat1=mat(volr)+1j*mat(voli) ## up=linalg.pinv(mat1) ## out=up.real.tolist() ## out.extend(up.imag.tolist()) return val By the way Do you have any idea to debug the com server script ? ( I would like to know if a can access the value in the function while calling it from vb 6) tahnks a lot ! -- http://mail.python.org/mailman/listinfo/python-list