vml wrote: > 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 ! > > Debugging COM objects is best done using logging module or at least writing to a file during processing. You can review the log file to see what was going on.
-Larry -- http://mail.python.org/mailman/listinfo/python-list