Rubrik: Variablen/Strings · Array/ArrayList | VB-Versionen: VB.NET | 18.10.05 |
Nicht-nullbasierte Arrays in VB.NET Deklaration nicht-nullbasierter Arrays durch Verwendung einer ActiveX-DLL | ||
Autor: Manfred Bohn | Bewertung: | Views: 11.967 |
ohne Homepage | System: WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Arrays in VB.NET sind grundsätzlich 'nullbasiert', das heißt die untere Deklarationsgrenze jeder Dimension ist 0.
Diese Einschränkung kann man umgehen, wenn man die Array-Dimensionierung in eine VB6-erstellte ActiveX-DLL auslagert.
Vorgehensweise (in VB6 Prof.!):
- Erstellung eines neuen ActiveX-DLL-Projekts in VB6 - das Projekt wird benannt als 'pDimens'
- Das automatisch eingefügte Klassenmodul 'Class1' wird umbenannt in 'clsDimens' (öffentlich erstellbare 'Multiuse'-Klasse)
- In das Klassenmodul 'clsDimens' wird folgende öffentliche Methode eingefügt:
Public Function Dimens(ByRef x As Variant, _ ByVal ug1 As Long, ByVal og1 As Long, _ Optional ByVal ug2 As Long = 0, Optional ByVal og2 As Long = -1, _ Optional ByVal ug3 As Long = 0, Optional ByVal og3 As Long = -1) As Boolean On Error GoTo fehler If ug1 > og1 Then Exit Function If ug2 > og2 And ug3 > og3 Then ReDim x(ug1 To og1) ElseIf ug3 > og3 Then ReDim x(ug1 To og1, ug2 To og2) Else If ug2 > og2 Then Exit Function ReDim x(ug1 To og1, ug2 To og2, ug3 To og3) End If Dimens = True fehler: End Function
- Im Menü 'Projekt' -> 'Eigenschaften von ...' wird im Textfeld 'Projektbeschreibung' ein eindeutiger Identifikationstext eingetragen: 'VB6 Array-Deklaration für VB.Net'
- Das Projekt wird erstellt. Es entsteht die Bibliothek 'pDimens.dll'
Falls man in einer VB.Net-Anwendung nicht-nullbasierte Arrays verwenden möchte, setzt man einen Verweis auf diese Bibliothek: Menü 'Projekt' --> 'Verweis hinzufügen' --> Reiter 'COM'. In der Verweis-Liste ist der Komponentenname 'VB6 Array-Deklaration für VB.Net' auszuwählen.
Eine Instanz der Bibliotheksklasse 'clsDimens' wird im Code erstellt durch:
Dim d As New pDimens.clsDimens
Ein nicht-nullbasiertes dreidimensionales Array des Typs 'Object' erzeugt man danach durch:
Dim arr As Object If Not d.Dimens(arr, -100, 100, -30, -20, 2, 3) Then MsgBox("Dimensionierung scheitert", MsgBoxStyle.Exclamation) End If
Dieses Array läuft in der ersten Dimension von -100 bis 100, in der zweiten von -30 bis -20 und in der dritten von 2 bis 3.
Bei Zuweisungen auf das Array kann man die auch in VB.Net verfügbaren Funktionen 'LBound' und 'UBound' verwenden. Ein Verweis auf den Namespace 'Microsoft.Visualbasic' ist hierzu erforderlich.
For i = LBound(u, 1) To UBound(u, 1) For j = LBound(u, 2) To UBound(u, 2) For k = LBound(u, 3) to UBound(u, 3) u(i, j, k) = i * 10000 + j * 100 + k Next k Next j Next i
Auf die gleiche Weise können auch 1- und 2-dimensionale Arrays des Typs 'Object' erstellt werden:
Dim arr1 as Object d.Dimens(arr1, -100, 100) Dim arr2 as Object d.Dimens(arr2, -100, 100, 10, 20)