2011-07-27 66 views
0

我维护一个应用程序,其中包括向主计算机上的可用串行端口设备的用户提供一个列表。此应用程序使用GetDefaultCommConfig()函数来验证串行端口名称列表中的设备是否有效。我收到通知,指出我的应用程序不支持蓝牙串行端口。在今天调试此问题时,我发现使用蓝牙串行端口名称调用GetDefaultCommConfig()函数时不会返回成功的值。在这些情况下GetLastError()函数返回29(无效参数)。有没有解决这个问题的方法?GetDefaultCommConfig()如何与蓝牙SPP设备不兼容?

+0

蓝牙堆栈是什么?微软自己还是Widcomm/Broadcom,BlueSoleil或者东芝?或者全部都是? : - ,( – alanjmcf

+0

这是微软的堆栈,我正在使用串行通讯API –

+0

我也在这里看到了这个行为(例如,Widcomm的端口可以与这个API兼容),我使用WMI或者在注册表中查找获取端口名称见例如http://32feet.codeplex.com/wikipage?title=Getting%20Virtual%20COM%20Port%20Names&referringTitle=Documentation – alanjmcf

回答

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" 

艾伦

0

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

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

SPP COM端口仍然与超类型应用程序一起工作,但我不知道端口在该应用程序中是如何扫描或打开的 - 我只知道我的应用程序使用了kernel32.dll中的GetDefaultCommConfig()这不起作用。

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