我用 Delphi 11.3重新编译了一个用 Delphi 10创建的旧项目,工作得很好。现在它停止工作了。程序只是冻结。
程序使用TBluetooth LE组件与BLE设备(Microchip RN4871)通信。我做了文档中所说的一切,发现了设备,找到了它,发现了它的服务,找到了我需要的东西,得到了我需要的特性,并进行了交流。在Android手机上一切正常(FMX项目)。在Windows 11上,该程序仅在设备与Windows配对时才能工作。该项目抛出一个异常,说设备没有配对,就在我试图发现设备的服务时。我不明白,因为BLE不需要配对,据我所知。但好吧,我可以接受。现在我用 Delphi 11.3重新编译了这个项目。如果设备没有配对,程序只是冻结,而不是抛出异常。当我调用ADevice.DiscoverServices时,它就停止响应了。如果我将设备与Windows配对,它会继续。找到我需要的服务。然后我试着去解读这项服务的特点。AService.GetCharacteristic()返回nil,但这没关系,因为文档中说“警告:在调用GetCharacteristic之前,必须读取AService.Characteristics属性的值。否则,GetCharacteristic返回nil。”因此,让我们阅读AService.Characteristics。程序就冻结了。当我用 Delphi 10编译它时,完全相同的代码现在冻结了。我谷歌了又谷歌,什么也没找到。我阅读了这里与 Delphi 和蓝牙LE相关的每一个主题。什么都没找到。我错过了什么?Embarcadero搞砸了吗,我需要等待下一个 Delphi 版本吗?
1条答案
按热度按时间6mw9ycah1#
Delphi 11.3 BTLE在Windows上简直坏了。我需要更新文件System.Win.BluetoothWinRT.pas文件(也就是从源文件复制一份,并将更改后的副本添加到项目中)。
我所做的更改在此线程中处理:https://www.delphipraxis.net/213532-bluetooth-le-unter-windows-11-funktioniert-nicht-mehr.html
这是在德国,但修复应可读;)
告诉我这对你是否有效。