为什么GetDefaultCommConfig()不能与蓝牙SPP设备一起使用?

时间:2011-07-27 20:42:29

标签: winapi bluetooth serial-port

我维护一个应用程序,除其他外,它为用户提供主机上可用串行端口设备的列表。此应用程序使用GetDefaultCommConfig()函数来验证其串行端口名称列表中的设备是否有效。我收到通知,我的应用程序不适用于蓝牙串口。在今天调试此问题时,我发现当使用蓝牙串行端口名称调用时,GetDefaultCommConfig()函数不会返回成功的值。在这些情况下,GetLastError()函数返回29(无效参数)。这个问题有解决方法吗?

2 个答案:

答案 0 :(得分:2)

我已经看过我的机器上带有蓝牙的串口,并且可以确认GetDefaultCommConfig()无法通过Microsoft蓝牙堆栈创建的虚拟串行端口。然而,它似乎适用于Widcomm端口。 (我还没有测试过BlueSoleil / Toshiba /等。)

因此,对于MSFT端口,使用GetDefaultCommConfig()似乎是的最佳计划。要确定哪个端口是哪个堆栈,请检查HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM下的值,该值列出了COM端口名称作为值。如果值名称是“\ Device \ BtModemNNN”,则它是MSFT蓝牙堆栈。 (Widcomm有“\ Device \ BtPortNNN”)。

[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM]
"\\Device\\BtPort3"="COM19"
"\\Device\\BthModem2"="COM25"

艾伦

答案 1 :(得分:0)

这不是一个完整的答案。 我发现我的Windows 7开发机器非常正确地从GetDefaultCommConfig()返回蓝牙SPP COM端口,即使使用MSFT的堆栈(端口显示\ Device \ BthModem0和\ Device \ BthModem1)。

但是,我确实看到GetDefaultCommConfig()在Windows 8.1中失败,返回码为87(由GetLastError()返回)。这与COM端口的行为完全相同,但肯定不存在。

SPP COM端口仍可以使用Hyperterminal类型的应用程序,但我不知道如何在该应用程序中扫描或打开端口 - 我只知道我的应用程序使用来自kernel32.dll的GetDefaultCommConfig()及其类似不起作用。

远射半,但我不认为其他人在4年后有任何意见?