vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
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:     [ Jetzt bewerten ]Views:  11.994 
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)

Dieser Tipp wurde bereits 11.994 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 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