Hi Alex,
ich habe es doch noch mal mit Strings versucht, klappt und stürzt auch nicht ab.
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" \_
(pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Dim Arr() As String
Dim Ze() As Long
Private Sub Command1\_Click()
Dim i As Integer, m As Long, Po As Long, Txt As String
Txt = "AAAAAAAAAAAAAAAAAAAAA"
Po = 4
ReDim Preserve Arr(UBound(Arr) + 1)
ReDim Preserve Ze(UBound(Arr))
Arr(UBound(Arr)) = Txt
CopyMemory Ze(0), ByVal VarPtr(Arr(0)), (UBound(Arr) + 1) \* 4
m = Ze(UBound(Ze))
CopyMemory Ze(Po + 1), Ze(Po), (UBound(Ze) - Po) \* 4
Ze(Po) = m
CopyMemory ByVal VarPtr(Arr(0)), Ze(0), (UBound(Arr) + 1) \* 4
List2.Clear
For i = 0 To UBound(Arr)
List2.AddItem Arr(i)
Next
End Sub
Private Sub Form\_Load()
Dim r As Integer, p As Integer, n As Integer, i As Integer, zl As String
ReDim Arr(10)
ReDim Ze(10)
For i = 0 To 10
zl = ""
n = Int(Rnd(1) \* 10) + 1
For p = 1 To n
r = Int(Rnd(1) \* 26) + 65
zl = zl + Chr(r)
Next
Arr(i) = zl
List1.AddItem zl
Next
End Sub
Der Umweg über das zweite Array ist nötig. Wenn ich das richtig verstehe weigert sich VB mit zweí verschiedenen Zeigern auf die selbe Stelle im Speicher zu zeigen. Schritt für Schritt an den Zeigern zu arbeiten geht also nicht, aber das ganze Array auf einmal überschreiben geht.
Gruß Rainer