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,现在可以使用了。

感谢安德鲁为我指明了正确的方向。