Beispiel: ActiveX-Clientanwendung mit Helper-Methoden für die Konvertierung von Datentypen

Im Allgemeinen erfolgt die Datentypkonvertierung zwischen ActiveX (Visual Basic und VBScript) und Java™ -Methoden automatisch, wie im Abschnitt ActiveX beschrieben, und konvertiert Datentypen. Die Helper-Funktionen "Byte" und "Currency" sind für Fälle vorgesehen, in denen eine automatische Konvertierung nicht möglich ist:

  • Helper-Funktion "Byte"
    Da der Java-Datentyp "Byte" signiert (-127 bis 128) und der Visual-Basic-Datentyp "Byte" nicht signiert (0 bis 255) ist, müssen Sie den nicht signierten Datentyp "Byte" in Visual-Basic-Integer konvertieren, die wie der signierte Java-Datentyp "Byte" erscheinen. Sie können diese Konvertierung mit der folgenden Helper-Funktion durchführen:
    Private Function GetIntFromJavaByte(Byte jByte) as Integer
    	     GetIntFromJavaByte = (CInt(jByte) + 128) Mod 256 - 128
    End Function
  • Helper-Funktion für "Currency"
    Visual Basic 6.0 kann 64-Bit-Ganzzahlen wie Java-Methoden (als Datentyp "Long") nicht ordnungsgemäß verarbeiten. Daher verwendet Visual Basic den Typ "Currency", der im Wesentlichen ein 64-Bit-Datentyp ist. Der einzige Nebeneffekt bei Verwendung des Typs "Currency" (Variant-Typ VT_CY) besteht darin, dass ein Dezimalpunkt in den Typ eingefügt wird. Wenn Sie den 64-Bit-Wert von "Long" extrahieren und in Visual Basic bearbeiten möchten, verwenden Sie Code wie im folgenden Beispiel. Weitere Informationen zu diesem Verfahren zur Konvertierung von Währungstypen finden Sie in Q189862, HOWTO: Do 64-bit Arithmetik in VBAin der Microsoft Knowledge Base.
    ' Currency Helper Types
    Private Type MungeCurr
        Value As Currency
    End Type
    Private Type Munge2Long
        LoValue As Long
        HiValue As Long
    End Type
    
    ' Currency Helper Functions
    Private Function CurrToText(ByVal Value As Currency) As String
        Dim Temp As String, L As Long
        Temp = Format$(Value, "#.0000")
        L = Len(Temp)
        Temp = Left$(Temp, L - 5) & Right$(Temp, 4)
        Do While Len(Temp) > 1 And Left$(Temp, 1) = "0"
            Temp = Mid$(Temp, 2)
        Loop
        Do While Len(Temp) > 2 And Left$(Temp, 2) = "-0"
            Temp = "-" & Mid$(Temp, 3)
        Loop
        CurrToText = Temp
    End Function
    
    Private Function TextToCurr(ByVal Value As String) As Currency
        Dim L As Long, Negative As Boolean
        Value = Trim$(Value)
        If Left$(Value, 1) = "-" Then
            Negative = True
            Value = Mid$(Value, 2)
        End If
        L = Len(Value)
        If L < 4 Then
            TextToCurr = CCur(IIf(Negative, "-0.", "0.") & _
                              Right$("0000" & Value, 4))
        Else
            TextToCurr = CCur(IIf(Negative, "-", "") & _
                              Left$(Value, L - 4) & "." & Right$(Value, 4))
        End If
    End Function
    
    ' Java Long as Currency Usage Example
    Dim LC As MungeCurr
    Dim L2 As Munge2Long
    
    ' Assign a Currency Value (really a Java Long)
    ' to the MungeCurr type variable
    LC.Value = cyTestIn
    
    ' Coerce the value to the Munge2Long type variable
    LSet L2 = LC
    
    ' Perform some operation on the value, now that we
    ' have it available in two 32-bit chunks
    L2.LoValue = L2.LoValue + 1
    
    ' Coerce the Munge value back into a currency value
    LSet LC = L2
    cyTestIn = LC.Value