vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB603.09.12
UDTs vergleichen

UDTs schnell mit Hilfe der CompareMemory-API auf gleichen Inhalt testen.

Autor:  ZardozBewertung:     [ Jetzt bewerten ]Views:  1.565 
ohne HomepageSystem:  WinXP, Win7, Win8, Win10, Win11kein Beispielprojekt 

Der frühere Tipp   UDT - Benutzerdefinierte Datentypen vergleichen zeigt, wie zwei UDTs auf Gleichheit getestet werden können.

Einfacher geht es so:

' Benötigte Api-Funktion:
Private Declare Function CompareMemory Lib "ntdll.dll" _
  Alias "RtlCompareMemory" ( _
  ByRef Source1 As Any, _
  ByRef Source2 As Any, _
  ByVal Length As Long) As Long
' Code:
If CompareMemory(UDT1, UDT2, LenB(UDT1)) = LenB(UDT1) Then
  MsgBox "Gleich"
Else
  MsgBox "Ungleich"
End If

Ja, das war's auch schon. Auch hier gilt die Einschränkung, dass bei Strings nur feste Längen zulässig sind.

Übrigens: Der im Link genannte Tipp verwendet Len() zur Ermittlung der Anzahl der Bytes des UDT. Das ist nicht korrekt, LenB() ist richtig. Der Bytebedarf einer Variablen im UDT wird intern auf eine durch 4 teilbare Zahl aufgerundet. Dadurch entstehen, nach aussen nicht sichtbar, leere Bytes zwischen den Variablen, die mit LenB() berücksichtigt werden. Len() gibt dagegen nur den Bytebedarf der Variablentypen aus.