VB Classic hat leider keinen 64 Bit Integer Datentyp, allerdings versteckt sich im Variant der Typ "Decimal", der groß genug ist, um diese Zahlen aufzunehmen. Mit einfacher Arithmetik lassen sich DWords so umrechnen, dass sie als QWords in Decimals dargestellt werden können. Folgende zwei Funktionen zeigen, wie das geht: ' lngLo: untere 32 Bits ' lngHi: obere 32 Bits ' signed: hat ein Vorzeichen Private Function To64BitInt(ByVal lngLo As Long, ByVal lngHi As Long, _ Optional ByVal signed As Boolean = True) As Variant Dim value As Variant If (lngLo And &H80000000) Then value = CDec(lngLo And &H7FFFFFFF) + CDec(2147483648#) Else value = CDec(lngLo) End If If (Not signed) And (lngHi And &H80000000) Then lngHi = lngHi And &H7FFFFFFF value = value + (CDec(lngHi) + CDec(2147483648#)) * CDec(4294967296#) Else value = value + CDec(lngHi) * CDec(4294967296#) End If To64BitInt = value End Function ' value: QWord ' lngLo: untere 32 Bits ' lngHi: obere 32 Bits Private Sub From64BitInt(ByVal value As Variant, _ ByRef lngLo As Long, ByRef lngHi As Long) Dim varLo As Variant, varHi As Variant varHi = Int(value / CDec(4294967296#)) varLo = value - (varHi * CDec(4294967296#)) If varHi >= 2147483648# Then lngHi = (varHi - 2147483648#) Or &H80000000 Else lngHi = varHi End If If varLo >= 2147483648# Then lngLo = (varLo - 2147483648#) Or &H80000000 Else lngLo = varLo End If End Sub Kleines Beispiel zur Funktionsweise: Private Sub Form_Load() Dim qword As Variant Dim lo_dword As Long Dim hi_dword As Long ' aus 2 DWords ein QWord bilden lo_dword = &HFFFFFFFF hi_dword = &HFFFFFFFF ' = 2 ^ 64 - 1 = 18446744073709551615 ' würde man für den Parameter "signed" true übergeben, ' wäre das Ergebnis -1 qword = To64BitInt(lo_dword, hi_dword, False) MsgBox qword ' aus dem QWord wieder 2 DWords machen From64BitInt qword, lo_dword, hi_dword MsgBox Hex$(hi_dword) & " " & Hex$(lo_dword) ' = FFFFFFFF FFFFFFFF End Sub Dieser Tipp wurde bereits 9.407 mal aufgerufen.
Anzeige
![]() ![]() ![]() (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. |
Neu! sevCoolbar 3.0 ![]() Professionelle Toolbars im modernen Design! Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Tipp des Monats TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR... |
||||||||||||||||
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. |