vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Variablen/Strings · Array/ArrayList   |   VB-Versionen: VB.NET18.10.05
Nicht-nullbasierte Arrays in VB.NET

Deklaration nicht-nullbasierter Arrays durch Verwendung einer ActiveX-DLL

Autor:   Manfred BohnBewertung:  Views:  11.967 
ohne HomepageSystem:  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.!):

  1. Erstellung eines neuen ActiveX-DLL-Projekts in VB6 - das Projekt wird benannt als 'pDimens'
  2. Das automatisch eingefügte Klassenmodul 'Class1' wird umbenannt in 'clsDimens' (öffentlich erstellbare 'Multiuse'-Klasse)
  3. 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
  4. Im Menü 'Projekt' -> 'Eigenschaften von ...' wird im Textfeld 'Projektbeschreibung' ein eindeutiger Identifikationstext eingetragen: 'VB6 Array-Deklaration für VB.Net'
  5. 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)



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle 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.