BluetoothLEDevice.FromIdAsync devuelve un objeto __ComObject no convertible.
Antes de comenzar, quiero mencionar que, al investigar este problema, he revisado decenas de publicaciones aquí y en otros lugares, y soy consciente de que VB es lo peor para la programación Bluetooth. Sin embargo, esto es para un cliente que tiene un gran sistema heredado en VB y no tengo opción.
Según la documentación de MS, se supone que el método BluetoothLEDevice.FromIdAsync
devuelve un objeto BluetoothLEDevice, pero en mi sistema devuelve un System.__ComObject
genérico al que no puedo convertir en un BluetoothLEDevice. He intentado usar Cast y DirectCast pero ninguno funciona. El código de muestra en C++ que he revisado no requiere ningún tipo de conversión; la variable se declara y se inicializa utilizando la función BluetoothLEDevice.FromIdAsync
sin problemas.
Aquí está mi código de prueba.
Private Sub ConnectToDevice(di As DeviceInformation)
' di.id = "BluetoothLE#BluetoothLE48:5f:99:3c:fd:36-84:2e:14:26:9e:7b"
Debug.Print("Conectando con " & di.Name & " a las " & Now.ToShortTimeString)
Dim genericObject As Object
Dim myDevice As BluetoothLEDevice
Try
genericObject = BluetoothLEDevice.FromIdAsync(di.Id)
Catch ex As Exception
Debug.Print(ex.Message)
End Try
If Not IsNothing(genericObject) Then Debug.Print("El uso de 'Object' devuelve " & genericObject.ToString)
Try
myDevice = BluetoothLEDevice.FromIdAsync(di.Id)
Catch ex As Exception
Debug.Print(ex.Message)
End Try
End Sub
Y aquí está el resultado:
Conectando con TM-2021090161 a las 2:08 PM
El uso de 'Object' devuelve System.__ComObject
Se produjo una excepción: 'System.InvalidCastException' en testBTLE.exe
No se puede convertir un objeto del tipo 'System.__ComObject' al tipo 'Windows.Devices.Bluetooth.BluetoothLEDevice'.
Y una captura de pantalla del genericObject devuelto:
davy.ai
El problema que enfrenta el usuario está relacionado con el tipo de retorno de la función
BluetoothLEDevice.FromIdAsync
. La documentación indica que esta función debe devolver un objetoBluetoothLEDevice
, pero en el sistema del usuario está devolviendo un objeto genéricoSystem.__ComObject
que no se puede convertir a un objetoBluetoothLEDevice
. El usuario ha intentado utilizarCast
yDirectCast
sin éxito.El usuario ha investigado varias publicaciones y ha descubierto que VB.net no es adecuado para la programación Bluetooth. Sin embargo, tienen un cliente con un sistema VB heredado y no tienen otra opción más que utilizarlo.
El usuario ha proporcionado su código de prueba y la salida generada. La salida muestra que el primer intento de conectarse al dispositivo Bluetooth utilizando la función
FromIdAsync
devuelve un objeto genéricoSystem.__ComObject
. El segundo intento de asignar el valor devuelto a un objetoBluetoothLEDevice
falla con una excepciónInvalidCastException
.Según la información proporcionada, parece que el problema es más probable que sea causado por un problema con el stack de Bluetooth en el sistema del usuario. Esto podría ser debido a controladores desactualizados, hardware incompatible u otros problemas. El usuario debería intentar actualizar sus controladores y revisar los requisitos del sistema para dispositivos Bluetooth de baja energía para asegurarse de que su hardware sea compatible.
Si el problema persiste, el usuario puede considerar utilizar un lenguaje de programación o un marco de trabajo diferente para la programación Bluetooth. Si bien es posible encontrar soluciones alternativas en VB.net, podría ser más problemático a largo plazo.