VB 5/6-Tipp 0782: Array-Initialisierer
von Spatzenkanonier
Beschreibung
Array-Initialisierer
Hier werden ein paar Hilfsfunktionen vorgestellt, die es ermöglichen, streng typisierte Arrays zu befüllen, unter Verwendung des ParamArray-Features von VisualBasic.
Die Funktionen unterstützen dynamische Arrays jeden Datentyps ( dynamisches Array: deklariert ohne Angabe der Element-Zahl ).
Diese Flexiblität wird erkauft durch die Verwendung von Variant-Argumenten in den Parameterlisten.
Es obliegt also der Sorgfalt des Benutzers, ein verwendbares Array, sowie dazu passende Elemente zu übergeben, da der Compiler bei Datentyp Variant jedes Argument akzeptiert.
Eine große Gefahr geht davon aber nicht aus, da eine Fehlanwendung sofort einen Laufzeitfehler auslöst.
Die Gefahr, daß Arrays fehlerhaft initialisiert in den weiteren Programm-Ablauf entlassen werden könnten, besteht nicht, aufgrund der strengen Typisierung der Arrays.
Eine Nutzanwendung könnte bei der Assembler-Programmierung liegen, wo der API z.T. sehr lange Zahlen-Arrays übergeben werden.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: keine | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '----------- Anfang Projektdatei pjArrayInit.vbp ----------- ' Die Komponente 'Microsoft Windows Common Controls 6.0 (SP6) (mscomctl.ocx)' wird benötigt. '---- Anfang Modul "modArrayInit" alias modArrayInit.bas ---- Option Explicit Public Function IsArrayInited(ByRef ArrayArg As Variant) As Boolean On Error Resume Next If UBound(ArrayArg) < -1 Then 'löst einen Fehler aus, wenn ArrayArg noch nicht initialisiert. IsArrayInited = False 'Nur bei Fehler kann dieser Zweig erreicht werden Exit Function End If IsArrayInited = True End Function Public Sub ArrayInit(ByRef ArrayArg As Variant, ByVal First As Variant, ParamArray Elements() As Variant) 'Der Parameter First erzwingt, daß ArrayArg mit mindestens einem Element initialisiert wird ArrayConcat ArrayArg, 0, Array(First) ArrayConcat ArrayArg, 1, CVar(Elements) End Sub 'Bei Arrays mit über 150 Elementen kann es zu Problemen kommen, da die IDE "nur" 15 Zeilfortsetzungen zuläßt. 'Diese Sub ermöglicht, einem bestehenden Array weitere Elemente hinzuzufügen. Public Sub ArrayAddRange(ByRef ArrayArg As Variant, ParamArray Elements() As Variant) ArrayConcat ArrayArg, UBound(ArrayArg) + 1, CVar(Elements) End Sub Private Sub ArrayConcat(ByRef ArrayArg As Variant, Offset As Integer, Elements As Variant) Dim ElementsUBound As Integer ElementsUBound = UBound(Elements) If ElementsUBound < 0 Then Exit Sub ReDim Preserve ArrayArg(ElementsUBound + Offset) Dim I As Integer For I = 0 To ElementsUBound ArrayArg(I + Offset) = Elements(I) Next End Sub '----- Ende Modul "modArrayInit" alias modArrayInit.bas ----- '--------- Anfang Modul "modMain" alias modMain.bas --------- Option Explicit Public Sub main() Dim I As Integer For I = 0 To 1 InitAndDisplay Next Dim Msgs() As String ArrayInit Msgs, "Die", "Initialisierung", "funktioniert", "ebensogut", "auch", "mit", "String-Arrays." MsgBox Join(Msgs, " ") End Sub Private Sub InitAndDisplay() Static asm() As Long If IsArrayInited(asm) Then MsgBox "asm wurde bereits initialisiert" Else ArrayInit asm, 1, 2, 3, 4 ArrayAddRange asm, 5, 6, 7, 8, 9 'ab hier nur noch Ausgabe Dim Msgs() As String ReDim Msgs(UBound(asm) + 1) Msgs(0) = "asm wurde wie folgt initialisiert:" & vbNewLine Dim I As Integer For I = 0 To UBound(asm) Msgs(I + 1) = CStr(asm(I)) Next MsgBox Join(Msgs, vbNewLine) End If End Sub '---------- Ende Modul "modMain" alias modMain.bas ---------- '------------ Ende Projektdatei pjArrayInit.vbp ------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.