Exemple : Application client ActiveX utilisant des méthodes auxiliaires pour la conversion des types de données
En général, les conversions de types de données entre ActiveX (Visual Basic et VBScript) et le code Java™ se font automatiquement, comme indiqué dans Passerelle ActiveX vers EJB, conversion des types de données. Toutefois, la fonction auxiliaire byte et la fonction auxiliaire currency sont fournies si la conversion automatique ne peut pas être exécutée :
- Byte helper Dans la mesure où le type de données Byte Java est signé (-127 à 128) alors que son équivalent Visual Basic ne l'est pas (0 à 255), vous devez convertir les types Byte non signés en entiers Visual Basic, qui ressemblent à l'octet signé du code Java. Pour ce faire, utilisez la fonction auxiliaire suivante :
Private Function GetIntFromJavaByte(Byte jByte) as Integer GetIntFromJavaByte = (CInt(jByte) + 128) Mod 256 - 128 End Function
- Currency Helper Visual Basic 6.0 ne traite pas les entiers 64 bits aussi bien que les méthodes Java (tels que le type de données Long). Par conséquent, Visual Basic utilise le type Currency, qui est de façon intrinsèque un type de données à 64 bits. Le seul inconvénient du type Currency (le type Variant VT_CY) est qu'une virgule décimale est insérée dans le type. Pour extraire et manipuler la valeur Long de 64 bits sous Visual Basic, inspirez-vous de l'exemple de code suivant. Pour plus de détails sur cette technique de conversion des types de données Currency, reportez-vous à l'article "Q189862, HOWTO: Do 64-bit Arithmetic in VBA", de la base de connaissance Microsoft.
' Types auxiliaire Currency Private Type MungeCurr Value As Currency End Type Private Type Munge2Long LoValue As Long HiValue As Long End Type ' Fonctions auxiliaires Currency 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 ' Long Java comme exemple d'utilisation de Currency Dim LC As MungeCurr Dim L2 As Munge2Long ' Attribue une valeur Currency (en fait une valeur Java) ' à la variable de type MungeCurr LC.Value = cyTestIn ' Force la valeur de la variable de type Munge2Long LSet L2 = LC ' Effectue des opérations sur la valeur, maintenant qu'elle est ' disponible en deux morceaux de 32 bits L2.LoValue = L2.LoValue + 1 ' Force le rétablissement de la valeur de Munge en valeur Currency LSet LC = L2 cyTestIn = LC.Value