[Harbour] SF.net SVN: harbour-project:[10930] trunk/harbour
Mindaugas Kavaliauskas
dbtopas at dbtopas.lt
Mon May 4 11:02:14 EDT 2009
Hi,
> For me array support is enough to cover passing arrays to
> OLE calls and maybe getting back arrays from OLE calls.
I've implemented some limited support for arrays. It's enough for the
simplest OpenOffice oDesktop:loadComponentFromURL() calls. Though, I do
not have more tests for multidimensional array parameters, or array
return values.
See, new hbole/tests/testole.prg -> OpenOffice Writer test. It creates
table and formating inside Writer.
> Full support in hbwin (xhb) is quite strange, f.e. there is such
> code in testole.prg:
>
> [ #xtranslate :<!Method!>( <args,...> ) := => :<Method>( <args> ):Value := ]
>
> #1 oAS:Cells( 3, 1 ) := "Explict DEFAULT Method Text:"
> #2 oAS:Cells[ 2, 3 ] += "!"
> #3 oAS:Cells( 4, 1 ):Value := "Numeric:"
>
> Three different ways next to each other to express the same thing,
> quite unclean. We should probably employ a syntax which works
> properly in all situations, whatever that syntax might be. Pbly array
> assignment is the one, but I also trust your judgement.
#1 requires PP hack, it also has some side effects.
The real type of oAS:Cells(3,1) is object (HB_OLEAUTO to be precise). #1
look like a attempt to assign string value to object.
Using PP hack
oAS:Cells( 3, 1 ) := "Explict DEFAULT Method Text:"
will work, but
oI := oAS:Cells( 3, 1 )
oI := "Explict DEFAULT Method Text:"
will not work.
Another problem is, that
oAS:Cells( 3, 1 ) := "Explict DEFAULT Method Text:"
? oAS:Cells( 3, 1 )
will not print anything because oAS:Cells(3,1) is object! So, I want to
avoid automatic/hidden :Value property implementation and suggest to use
:Value explicitly. This will help to avoid side effects also.
#2 is hidden :Item() method call, for ICollection interface. You can
always do:
oAS:Cells:Item(2):Item(3)
instead of
oAS:Cells[2,3]
but oAS:Cells[2,3] is also a object, not a value of the cell, so most
side effect for #1 ir valid for #2 also.
One more thing is that OLE uses different (aka column based, Fortran)
array index order. So,
oAS:Cell[2, 3]
is equivalent to:
oAS:Cells(3, 2)
Notice a different index order. These are the reasons, why I do not want
implement array access operator. Those who want to reach the exact array
access action can call a documented :Item() method of ICollection.
Array assignment causes even more problems!
So, I left a valid #3 and changed testole.prg to work using this syntax.
Regards,
Mindaugas
More information about the Harbour
mailing list