Re: passing an array of variant in vb to a python COM object = win32com bug ?
On 4 mai, 06:56, "Gabriel Genellina" <[EMAIL PROTECTED]> wrote: > En Thu, 03 May 2007 09:41:57 -0300,vml<[EMAIL PROTECTED]> escribió: > > > 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 : > > > 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" > > That can't happen with your Python code below, so it must be on the > caller. Maybe you wrote something like: xx=something.SqVal(yy) and xx,yy > are declared of different sizes. > It is true that I call the python routine like that in vb : toto = obj.SqVal(ty) If I am understanding well I need to pass an array of 2x2 and I should retireve an array of variant of 2x2 I tried to do that : vb6 : Dim obj As Object Dim toto(1, 1, 2) As Variant Set obj = CreateObject("Python.Fop") Dim ty(1, 1, 2) As Variant ty(0, 0, 0) = 1 ty(0, 1, 0) = 2 ty(0, 0, 1) = 3 ty(0, 0, 2) = 7 ty(0, 1, 1) = 4 ty(0, 1, 2) = 45 ty(1, 0, 0) = 1 ty(1, 1, 0) = 2 ty(1, 0, 1) = 3 ty(1, 0, 2) = 7 ty(1, 1, 1) = 4 ty(1, 1, 2) = 45 toto = obj.SqVal(ty) but it is saying that the compiler can not assign the array toto at the line toto=obj.SqVal() hum strange . any ideas ? Thank you for your help ! > > def SqVal(self,val): > > ## ... > > 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) > > Write a log file as suggested, or use OutputDebugString with the DebugView > program fromwww.sysinternals.com > > -- > Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list
Re: passing an array of variant in vb to a python COM object = win32com bug ?
En Thu, 03 May 2007 09:41:57 -0300, vml <[EMAIL PROTECTED]> escribió: > 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 : >> > 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" That can't happen with your Python code below, so it must be on the caller. Maybe you wrote something like: xx=something.SqVal(yy) and xx,yy are declared of different sizes. > def SqVal(self,val): > ## ... > 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) Write a log file as suggested, or use OutputDebugString with the DebugView program from www.sysinternals.com -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list
Re: passing an array of variant in vb to a python COM object = win32com bug ?
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
Re: passing an array of variant in vb to a python COM object = win32com bug ?
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
Re: passing an array of variant in vb to a python COM object = win32com bug ?
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 -- http://mail.python.org/mailman/listinfo/python-list
passing an array of variant in vb to a python COM object = win32com bug ?
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 ? thank you ! -- http://mail.python.org/mailman/listinfo/python-list