Forums Neueste Beiträge
 

Type kopieren

26/11/2008 - 14:46 von Jan | Report spam
Hallo,

ich hab' einen Type und davon ein Array initialisiert. Nun möchte ich eine
komplette Kopie des Array's erstellen.
Versucht habe ich es folgendermaßen:

Private Declare Sub memCPY _
Lib "kernel32" Alias "RtlMoveMemory" _
(ByRef tgt As Any, _
ByRef src As Any, _
ByVal cnt As Long)

...

Dim Src1 as Type1
Dim Dst1 as Type1

Dim Src2() as Type2
Dim Dst2() as Type2

private sub Test
Dim i As Integer

memCPY Dst1, Src1, Len( Src1)

For i = 0 To UBound(Dst2)-1
memCPY Dst2(i), Src2(i), Len(Src2(i))
Next i

end sub

Irgendwas passt da noch nicht. Denn beim Beenden des Programmes kommt eine
suspekte Fehlermeldung (Unbehandelte Ausnahme und die Entwicklungsumgebung
wird beendet).

Weiß jemand Rat?

Viele Grüße
Jan
 

Lesen sie die antworten

#1 Schmidt
26/11/2008 - 19:10 | Warnen spam
"Jan" schrieb im Newsbeitrag
news:
Hallo,

ich hab' einen Type und davon ein Array initialisiert. Nun möchte ich eine
komplette Kopie des Array's erstellen.
Versucht habe ich es folgendermaßen:



Die Effekte die Du siehst, kommen vom Double-Freeing
der eventuell in der TypeDef enthaltenen "Pointer-Typen",
wie z.B. Strings (die nicht fixed Length Variante) oder
Objekten oder auch Variants (so sie denn weitere Pointer-
Typen enthalten).

Solange Du Deine Typed-Arrays dynamisch definierst,
kannst Du sie auch direkt zuweisen/kopieren - dann
passt VB unter der Haube schon auf, dass alles korrekt
"rüberbewegt" wird (im Falle von Objekten in der Typedef
werden dann allerdings keine neuen Instanzen angelegt,
sondern einfach nur der Objektinterne RefCounter entspr.
hochgezàhlt).

Hier ein Beispiel:

Private Type MyUDT
L As Long
S As String
End Type

Private Sub Form_Load()
Dim Src() As MyUDT, Dst() As MyUDT

ReDim Src(1 To 1)
Src(1).L = 1: Src(1).S = "entry 1"

Dst = Src 'copy

Debug.Print Dst(1).L, Dst(1).S
End Sub

Olaf

Ähnliche fragen