2011-07-27 69 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年後有任何投入?