BluetoothLEDevice.FromIdAsync Returns 不可施法 __ComObject
BluetoothLEDevice.FromIdAsync Returns Uncastable __ComObject
在我们开始之前:在研究这个问题时,我已经查看了这里和其他地方的许多帖子,并意识到 VB 是 最糟糕的 用于蓝牙编程。但是,这是针对拥有大量遗留 VB 系统的客户,我别无选择。
根据 MS 文档,BluetoothLEDevice.FromIdAsync
应该是 return 一个 BluetoothLEDevice 对象,但在我的系统上它 return 是一个我无法转换的通用 System.__ComObject
到蓝牙 LED 设备。我试过 Cast 和 DirectCast,但都不起作用。我看过的示例 C++ 代码不需要任何类型的转换;使用 BluetoothLEDevice.FromIdAsync
函数声明和设置变量,没有任何戏剧性。
这是我的测试代码。
Private Sub ConnectToDevice(di As DeviceInformation)
'
' di.id = "BluetoothLE#BluetoothLE48:5f:99:3c:fd:36-84:2e:14:26:9e:7b"
'
Debug.Print("Connecting To " & di.Name & " at " & 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("Using 'Object' yeilds " & genericObject.ToString)
Try
myDevice = BluetoothLEDevice.FromIdAsync(di.Id)
Catch ex As Exception
Debug.Print(ex.Message)
End Try
End Sub
这是输出:
Connecting To TM-2021090161 at 2:08 PM
Using 'Object' yeilds System.__ComObject
Exception thrown: 'System.InvalidCastException' in testBTLE.exe
Unable to cast object of type 'System.__ComObject' to type 'Windows.Devices.Bluetooth.BluetoothLEDevice'.
以及 returned genericObject 的屏幕截图:
FromIdAsync 需要 运行 异步,我无法做到这一点,因为我收到一条错误消息,指出它没有等待者。事实证明,我需要 NuGet System.Runtime.Windowsruntime dll。我添加了 Await,现在可以使用了。
感谢安德鲁为我指明了正确的方向。
在我们开始之前:在研究这个问题时,我已经查看了这里和其他地方的许多帖子,并意识到 VB 是 最糟糕的 用于蓝牙编程。但是,这是针对拥有大量遗留 VB 系统的客户,我别无选择。
根据 MS 文档,BluetoothLEDevice.FromIdAsync
应该是 return 一个 BluetoothLEDevice 对象,但在我的系统上它 return 是一个我无法转换的通用 System.__ComObject
到蓝牙 LED 设备。我试过 Cast 和 DirectCast,但都不起作用。我看过的示例 C++ 代码不需要任何类型的转换;使用 BluetoothLEDevice.FromIdAsync
函数声明和设置变量,没有任何戏剧性。
这是我的测试代码。
Private Sub ConnectToDevice(di As DeviceInformation)
'
' di.id = "BluetoothLE#BluetoothLE48:5f:99:3c:fd:36-84:2e:14:26:9e:7b"
'
Debug.Print("Connecting To " & di.Name & " at " & 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("Using 'Object' yeilds " & genericObject.ToString)
Try
myDevice = BluetoothLEDevice.FromIdAsync(di.Id)
Catch ex As Exception
Debug.Print(ex.Message)
End Try
End Sub
这是输出:
Connecting To TM-2021090161 at 2:08 PM
Using 'Object' yeilds System.__ComObject
Exception thrown: 'System.InvalidCastException' in testBTLE.exe
Unable to cast object of type 'System.__ComObject' to type 'Windows.Devices.Bluetooth.BluetoothLEDevice'.
以及 returned genericObject 的屏幕截图:
FromIdAsync 需要 运行 异步,我无法做到这一点,因为我收到一条错误消息,指出它没有等待者。事实证明,我需要 NuGet System.Runtime.Windowsruntime dll。我添加了 Await,现在可以使用了。
感谢安德鲁为我指明了正确的方向。