True fxm, var length string array is out via the pointers method.
As an exercise (for my right index finger), I put forward an old fashioned solution.
Code: Select all
#macro set(datatype)
Sub copy Overload(dest() As datatype,src() As datatype)
Var d=Ubound(src,0)'(dimension)
Select Case d
Case 1
redim dest(Lbound(src,1) To Ubound(src,1))
For n As Long=Lbound(src,1) To Ubound(src,1)
dest(n)=src(n)
Next
Case 2
redim dest(Lbound(src,1) To Ubound(src,1),_
Lbound(src,2) To Ubound(src,2))
For a As Long=Lbound(src,1) To Ubound(src,1)
For b As Long=Lbound(src,2) To Ubound(src,2)
dest(a,b)=src(a,b)
Next:Next
Case 3
redim dest(Lbound(src,1) To Ubound(src,1),_
Lbound(src,2) To Ubound(src,2),_
Lbound(src,3) To Ubound(src,3))
For a As Long=Lbound(src,1) To Ubound(src,1)
For b As Long=Lbound(src,2) To Ubound(src,2)
For c As Long=Lbound(src,3) To Ubound(src,3)
dest(a,b,c)=src(a,b,c)
Next:Next:Next
Case 4
redim dest(Lbound(src,1) To Ubound(src,1),_
Lbound(src,2) To Ubound(src,2),_
Lbound(src,3) To Ubound(src,3),_
Lbound(src,4) To Ubound(src,4))
For a As Long=Lbound(src,1) To Ubound(src,1)
For b As Long=Lbound(src,2) To Ubound(src,2)
For c As Long=Lbound(src,3) To Ubound(src,3)
For d As Long=Lbound(src,4) To Ubound(src,4)
dest(a,b,c,d)=src(a,b,c,d)
Next:Next:Next:Next
Case 5
redim dest(Lbound(src,1) To Ubound(src,1),_
Lbound(src,2) To Ubound(src,2),_
Lbound(src,3) To Ubound(src,3),_
Lbound(src,4) To Ubound(src,4),_
Lbound(src,5) To Ubound(src,5))
For a As Long=Lbound(src,1) To Ubound(src,1)
For b As Long=Lbound(src,2) To Ubound(src,2)
For c As Long=Lbound(src,3) To Ubound(src,3)
For d As Long=Lbound(src,4) To Ubound(src,4)
For e As Long=Lbound(src,5) To Ubound(src,5)
dest(a,b,c,d,e)=src(a,b,c,d,e)
Next:Next:Next:Next:Next
case 6
redim dest(Lbound(src,1) To Ubound(src,1),_
Lbound(src,2) To Ubound(src,2),_
Lbound(src,3) To Ubound(src,3),_
Lbound(src,4) To Ubound(src,4),_
Lbound(src,5) To Ubound(src,5),_
Lbound(src,6) To Ubound(src,6))
For a As Long=Lbound(src,1) To Ubound(src,1)
For b As Long=Lbound(src,2) To Ubound(src,2)
For c As Long=Lbound(src,3) To Ubound(src,3)
For d As Long=Lbound(src,4) To Ubound(src,4)
For e As Long=Lbound(src,5) To Ubound(src,5)
For f As Long=Lbound(src,6) To Ubound(src,6)
dest(a,b,c,d,e,f)=src(a,b,c,d,e,f)
Next:Next:Next:Next:Next:Next
' to dim 8 if needed
End Select
End Sub
#endmacro
#macro cpy(dest,src,flag)
#if flag
set(typeof(src))
#endif
copy(dest(),src())
#endmacro
Dim As String g(3,4)={{"1","2","3","4","5"},_
{"a","b","c","d","e"},_
{"9","8","7","6","5"},_
{"z","y","x","w","v"}}
Dim As String s()
cpy(s,g,1)
'Erase(g)
For r As Long=0 To 3
For c As Long=0 To 4
Print s(r,c);
Next
Print
Next
Print
Type complex
As Double re,im
dim as string t
declare constructor
declare constructor(as double,as double,as string)
declare operator cast() as string
End Type
constructor complex
end constructor
constructor complex(d1 as double,d2 as double,s as string)
re=d1
im=d2
t=s
end constructor
operator complex.cast() as string
return str(re)+","+str(im)+ str(t)
end operator
Redim As complex c(1 To 2,1 To 3)
Print "original"
For n As Long=1 To 2
For m As Long=1 To 3
c(n,m)=complex(Rnd-Rnd,Rnd-Rnd," i")
Print c(n,m)
Next
Print
Next
Dim As complex k()
cpy(k,c,1)
Print "copied"
For n As Long=1 To 2
For m As Long=1 To 3
print k(n,m)
Next
Print
Next
Print
dim as any ptr p(...)={@s(0),@k(1,1)}
redim as any ptr q()
cpy(q,p,1)
print p(0),p(1)
print q(0),q(1)
print
dim as string z(1 to 3)={"hello","goobbye","Press any key to end"}
dim as string w()
cpy(w,z,0)
for n as long=1 to 3
print w(n)
next
sleep