@MP,
mytwocents
我认为你的解决方案有一个反面。大多数Acad函数不接受UDT函数。
例如,将WCS中的点转换为UCS坐标时可能会出现问题,反之亦然。
使用Doublearrays和variants不会有这个问题。
哦,还有一个复制初始化的索引数组的附加功能...艰难的方式。避免不了就用这个。
- Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, Source As Any, ByVal numBytes As Long)
- Sub Test()
- Dim P1(2) As Double
- Dim P2(2) As Double
- 'P1(0) = 1: P1(1) = 2: P1(2) = 3
- CopyArray P1, P2
- MsgBox (P2(2))
- End Sub
- Sub CopyArray(Source() As Double, Target() As Double)
- Dim NumOfBytes As Long
-
- On Error GoTo NoElements
- NumOfBytes = (UBound(Source) + 1) * LenB(Source(0))
- ReDim Target(UBound(Source)) 'no need for a diffrent number of items to be a
- 'true copy and save checking if the target is large enough...
-
-
- CopyMemory Target(0), Source(0), NumOfBytes
-
- NoElements:
- MsgBox "Empty Source array in Sub CopySourceArray() at " & Format$(Now(), "hh:nn ss"), vbCritical + vbOKOnly + vbMsgBoxSetForeground, "Void Array."
- On Error GoTo 0
- Exit Sub
- End Sub
|