2010-01-05 125 views
0

我試圖使用Broadcomm的Widcomm藍牙堆棧,它應該工作,但有一件事仍然我不明白:如何當我需要時自動打開虛擬COM通信?Widcomm藍牙:如何打開虛擬COM

我正在嘗試使用SPP(串行端口配置文件),但SDK的文檔並不那麼具有說服力。

請,我不能使用32FEET!

我包API的SPP服務器部分:

[DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)] 
    internal static extern IntPtr CreateSppServer(IntPtr pStack); 

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)] 
    internal static extern void DeleteSppServer(IntPtr pServer); 

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)] 
    internal static extern bool SppServerStart(IntPtr pServer, IntPtr pszServiceName); 

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)] 
    internal static extern bool SppServerStop(IntPtr pServer); 

    [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)] 
    internal static extern IntPtr SppServerNotifyWindow(IntPtr pServer, IntPtr hWnd, int nMsg); 

什麼是pszServiceName?哪裏可以找到它? 和hWnd和nMsg?

感謝

回答

2

我之前發佈了一個響應,但它似乎從來沒有出現! :-(

無論如何,我是32feet.NET庫的維護者和Widcomm支持的作者。首先,據我所知,許可證不應該成爲商業發佈的問題。請參閱Peter Foot的評論在http://32feet.net/forums/t/2289.aspx

「32feet.NET可免費用於商業或非商業用途。如果您使用的二進制文件,你可以只使用庫作爲-是,如果您修改源代碼的話需要包含。 32feet.NET License.txt文件並確保文件標題未被修改/刪除。「

I'l看看彼得是否可以在這裏發表評論來給出確定性。

無論如何,我們還沒有實現對Widcomm虛擬COM端口功能的支持,(儘管沒有人要求 - 除了你自己之外,它當然可能)。我不是虛擬COM端口的忠實粉絲。使用直接的套接字連接似乎更容易,而不是嘗試設置COM端口,並嘗試查找它創建的名稱爲[1],然後必須打開一個SerialPort才能使用它,然後如果連接丟失一個不知道也只是不斷重試...它容易得多隻是做到以下幾點:

Dim addr As BluetoothAddress _ 
    = BluetoothAddress.Parse("001122334455") 
' 
Dim ep As New BluetoothEndPoint(addr, BluetoothService.SerialPort) 
Dim cli As New BluetoothClient 
cli.Connect(ep) 
Dim peerStream As Stream = cli.GetStream() 
peerStream.Write/Read ... 

多見於http://www.alanjmcf.me.uk/comms/bluetooth/32feet.NET%20--%20User%20Guide.html

爲了回答您的具體問題的Widcomm 。可以創建多個藍牙服務實例,即多個SPP服務(每個使用SPP服務類別ID),每個服務都可以提供服務名稱屬性以允許客戶在它們之間進行選擇。在大多數情況下,它不是必需的,所以只需傳遞null或零長度的字符串 - Widcomm SDK文檔沒有說明什麼是允許的。至於窗口句柄,Widcomm使用C++虛擬方法(這使得直接 P /調用主要是不可能的)來實現事件/回調,大概菲蓋拉先生的代碼將這些回調轉換成窗口消息。

[1]創建藍牙虛擬COM端口並不簡單。在MSFT + Win32上,沒有人知道爲COM端口選擇了什麼名字!在MSFT + WM上,官方API在許多設備類型上運行不正常。而我們非官方的做法需要重啓IIRC。 :-(

1

所以第一關,你說你不能使用32feet.net。爲什麼?你顯然使用João Paulo Figueira's bluetooth stack library,因爲這就是wcbts.dll,所以它不能反對使用某些第三方庫(而32feet是免費且開源的)。

這使我想到問題2。如果你正在使用他的圖書館,你有沒有看過他如何使用這個圖書館的樣本?它是從你必須擁有的same place as the DLL下載的。

至於什麼hWnd和nMsg,只是基於這個事實,這是Windows編程和API的名稱,我會說hWnd是窗口的句柄,當圖書館發生某些事情時將會收到通知,並且nMsg是你想傳遞給該窗口的自定義消息常量,因此你可以查找這些消息。再次,我打賭他提供的樣本顯示了所有這些。

+0

是的,我已經看到了示例,但包裝沒有實施SPP服務,我試圖添加到項目中,實際上上面的代碼片段是由我寫的 – Sunrising 2010-01-07 11:26:21

+0

此外32feet不好如果你想賣你的產品! – Sunrising 2010-01-07 16:24:46