Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/11/2005, 13:21
Avatar de Beakdan
Beakdan
 
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Microcontroladores PIC... :-p sólo tú puedes solucionar ese problema.
Pero tu problema del lado de la PC con VB, tiene varias soluciones:
Puedes declarar dos tipos de datos, uno que contenga un integer, y otro con contenga dos bytes. De este modo, usas LSet para embutir un tipo de dato en el otro, y ya tienes tu dato de 16bits. Otra opción es usar la API, para acomodar byte a byte sobre el integer. El siguiente code te puede servir...

Código:
Option Explicit

Private Declare Sub RtlMoveMemory Lib "kernel32" ( _
    ByRef Destination As Any, _
    ByRef Source As Any, _
    ByVal Length As Long)
    
Private Type WORD_BYTE
    ByteLo As Byte
    ByteHi As Byte
End Type

Private Type WORD_INT
    IntFull As Integer
End Type


Private Sub Form_Load()
Dim tmpInt As Integer
Dim tmpWrdInt As WORD_INT
Dim tmpWrdByt As WORD_BYTE
Dim tmpBytArr(1) As Byte

    '*******************************************
    'Usand LSet y definiciones de tipos de datos
    'Fácil de usar, pero hay que definir dos
    'tipos de datos para simular algo que se
    'puede hacer en C con uniones
    '*******************************************
    
    'Asignar el byte bajo
    tmpWrdByt.ByteLo = 0
    'Asignar el byte alto
    tmpWrdByt.ByteHi = 4
    '&H0400
    'Embutirlo en la variable int
    LSet tmpWrdInt = tmpWrdByt
    Debug.Print tmpWrdInt.IntFull
    
    
    '*******************************************
    'Usando la API
    'Hay que declarar la llamada a la función
    'RtlMoveMemory y tener cuidado al
    'utilizarla o puedes causar un
    'error grave en el programa.
    '*******************************************
    
    tmpBytArr(0) = 0
    tmpBytArr(1) = 4
    '&H0400
    'Acomodar el primer byte en el byte bajo del int
    RtlMoveMemory tmpInt, tmpBytArr(0), 1&
    'Acomodar el segundo byte en el byte alto del int
    RtlMoveMemory ByVal VarPtr(tmpInt) + 1, tmpBytArr(1), 1&
    Debug.Print tmpInt

End Sub