Ejemplo: Aplicación de cliente ActiveX que utiliza métodos de ayudante para la conversión de tipos de datos
Normalmente, la conversión de tipos de datos entre ActiveX (Visual Basic y VBScript) y Java™ se produce automáticamente, como se ha descrito en el tema Puente de ActiveX a EJB, conversión de tipos de datos. Sin embargo, se proporcionan las funciones de ayudante de bytes y de moneda cuando no es posible la conversión automática:
- Función de ayudante de bytes Dado que el tipo de datos de byte de Java son bytes con signo (-127 a 128) y el tipo de datos de byte de Visual Basic son bytes sin signo (0 a 255), debe convertir los bytes sin signo a enteros de Visual Basic, que son similares a los bytes con signo de Java. Para hacer esta conversión, puede utilizar las siguientes funciones de ayudante:
Private Function GetIntFromJavaByte(Byte jByte) as Integer GetIntFromJavaByte = (CInt(jByte) + 128) Mod 256 - 128 End Function
- Función de ayudante de moneda Visual Basic 6.0 no puede manejar correctamente los enteros de 64 bits como pueden hacerlo los métodos Java (como el tipo de datos Long). Por lo tanto, Visual Basic utiliza el tipo de moneda que es intrínsecamente un tipo de datos de 64 bits. El único efecto colateral de utilizar el tipo de moneda (el tipo de variante VT_CY) es que se inserta un punto decimal en el tipo. Para extraer y manipular el valor Long de 64 bits en Visual Basic, utilice el código como se muestra en el ejemplo siguiente: Para obtener más detalles acerca de esta técnica para convertir los tipos de datos de moneda, consulte "Q189862, HOWTO: Do 64-bit Arithmetic in VBA", en la base de información de Microsoft.
' 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