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

https://www.vbarchiv.net
Rubrik: Variablen/Strings · UDT (Benutzerdefinierte Datentypen)   |   VB-Versionen: VB5, VB615.04.05
UDT als Parameter einer Klassen-Prozedur II

Ergänzung / Alternative zum Tipp "UDT als Parameter einer Klassen-Prozedur"

Autor:   Manfred BohnBewertung:  Views:  15.644 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11kein Beispielprojekt 

In dem Tipp  UDT als Parameter einer Klassen-Prozedur wird empfohlen, die Windows API-Funktion RtlMoveMemory zu verwenden, um die Adresse eines benutzerdefinierten Datentyps (UDT) an die Methode einer Klasse zu übergeben.

Diese Low-Level-Kopierfunktion erzeugt bei fehlerhaften Parametern meist einen nicht auffangbaren Fehler, d.h. die IDE bzw. das übersetzte Programm stürzt ab.
Zudem darf der so übergebene UDT nur einfache Datentypen enthalten. Sobald z.B. andere UDTs enthalten sind, klappt das Ganze nicht mehr.

Es ist meist günstiger, dem entsprechenden VB6-Fehlerhinweis zu folgen und die UDTs als öffentliche Typen in einem öffentlichen Objektmodul zu deklarieren.

Mit "öffentlichem Objektmodul" ist hier eine Klasse gemeint, deren Instancing-Eigenschaft auf "PublicNotCreatable" oder auf "MultiUse" eingestellt worden ist.

Das Problem:
Projekte vom Typ "Standard-EXE" können solche Klassen nicht enthalten. Dort ist die Instancing-Eigenschaft von Klassenmodulen prinzipiell auf den Wert "Private" beschränkt.

Es ist deshalb nötig, ein Projekt vom Typ "ActiveX-DLL" zu erstellen und dort bei einer beliebig benannten Klasse die Instancing-Eigenschaft auf "PublicNotCreatable" oder "MultiUse" einzustellen. Alle UDTs sind mit dem Schlüsselwort "Public" versehen in diesem Klassenmodul zu deklarieren. Die "öffentliche" Klasse benötigt keine weiteren Methoden oder Eigenschaften.

Bei der Benennung der UDTs ist zu beachten, dass diese Bezeichnungen später im globalen Namensraum von VB6 auftauchen und deshalb möglichst eindeutig und aussagekräftig zu formulieren sind.

In der IDE sollte im Menü "Projekt" ---> "Projekteigenschaften" unter "Projektbeschreibung" ein Hinweis darauf eingefügt werden, welche UDTs in der DLL deklariert worden sind.

Nach der Übersetzung (und dadurch: Registrierung) dieses ActiveX-Projekts kann in jedem Standard-EXE-Projekt ein Verweis darauf eingefügt werden. Danach stehen die UDTs dem Programmierer zur Verfügung - selbstverständlich auch für die Verwendung als Parameter der Methode einer Klasse (allerdings nicht "ByVal" und auch nicht "Optional").

Im Objektkatalog sind die UDTs und alle Elemente der UDTs aufgelistet.

Das Verfahren erlaubt auch die Deklaration von Arrays variabler Größe als Element in UDTs sowie die Verwendung hierarchisch verschachtelter UDTs.
 



Anzeige

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

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.