| |

Fortgeschrittene ProgrammierungRe: Public Type und Anzahl.... | |  | Autor: TheNukeduke | Datum: 16.01.08 11:53 |
| Hallo Sina,
sofern dein Typ nur Strings enthält, gibt es eine Lösung, die allerdings etwas
unsauber ist, also Vorsicht beim Benutzen:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
ByVal destination_pointer As Long, _
ByVal source_pointer As Long, _
ByVal bytes As Long)
Private Type test
s1 As String
s2 As String
s3 As String
s4 As String
s5 As String
End Type
Private Const TEST_ELEMENTS = 5 ' Beim erweitern des Typs anpassen!
Private Sub Form_Load()
Dim arr(1 To TEST_ELEMENTS) As String ' Array anlegen
Dim bla As test
' ein paar Zuweisungen
bla.s1 = "erstes Element"
bla.s3 = "drittes Element"
bla.s4 = vbNullString
bla.s5 = "ENDE"
CopyTypeToArray bla, arr ' Funktionsaufruf
MsgBox arr(1) & vbCrLf & arr(2) & vbCrLf & arr(3) & vbCrLf & arr(4) & vbCrLf & _
arr(5) ' Testausgabe
End Sub
' Der Funktion wird einfach der Typ und das Array übergeben
Private Function CopyTypeToArray(ByRef struct As test, ByRef arr() As String)
Dim I As Long
Dim J As Long
Dim Min As Long
Dim Max As Long
Min = VarPtr(struct.s1) ' MUSS das erste Element des Typs sein
Max = Min + Len(struct) - 1
J = 0
For I = Min To Max Step 4
J = J + 1
CopyMemory VarPtr(arr(J)), I, 4
Next I
End Function Ich hoffe der Code ist verständlich, zum Testen einfach in ein leeres Projekt
kopieren und starten.
Zu beachten:
- Die Konstante zu dem Typ immer an die Zahl der Elemente anpassen
- Sollte sich das erste Element des Typs ändern, in der Copyfunktion anpassen
- Das Array nur direkt nach dem Kopieren verwenden
Sobalt man einen String in dem Typen ändert, enthält ein vorher kopiertes Array
ungültige Pointer und beim Zugriff auf diese könnte das Programm abstürzen.
Also in deinem Fall am besten immer Type in Array kopieren, insert machen, und
danach das Array als ungültig ansehen und nicht mehr verwenden.
Hoffe das Hilft dir.
Gru?,
Nukeduke
if (youAreHappyAndYouKnowIt) {
???ClapYourHands();
} |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Neu! sevEingabe 3.0 
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|