0

Broadcomm の Widcomm bluetooth スタックを使用しようとしていますが、動作するはずですが、まだ理解できないことが 1 つあります。通信する必要があるときに仮想 COM を自動的に開くにはどうすればよいですか?

SPP (シリアル ポート プロファイル) を使用しようとしていますが、SDK のドキュメントはそれほど網羅的ではありません。

お願いします、32フィートは使えません!

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 ???

ありがとう

4

2 に答える 2

2

以前にこれに対する応答を投稿しましたが、表示されなかったようです! :-(

とにかく、私は 32feet.NET ライブラリのメンテナーであり、Widcomm サポートの作成者です。まず、私が知る限り、ライセンスは商用配布では問題にならないはずです。http://32feet.net/forums/t/2289.aspxで Peter Foot のコメントを参照してください。

「32feet.NET は、商用または非商用にかかわらず無料で使用できます。バイナリを使用する場合は、ライブラリをそのまま使用できます。ソースに変更を加える場合は、32feet.NET License.txt ドキュメントを含めて確認する必要があります。ファイル ヘッダーは変更/削除されません。」

確実にするために、ピーターがここにコメントを投稿できるかどうかを確認します。

とにかく、私たちは 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 の質問に答える。Bluetooth サービスの複数のインスタンスを作成できます。つまり、複数の SPP サービス (それぞれが SPP サービス クラス ID を使用) を作成できます。それぞれがサービス名属性を提供して、クライアントがそれらの中から選択できるようにします。ほとんどの場合、これは必要ないため、null または長さ 0 の文字列を渡すだけです。Widcomm SDK のドキュメントには、何が許可されているかが記載されていません。Window ハンドルに関しては、Widcomm は C++ 仮想メソッド (yuk -- これにより直接のP/Invoking がほとんど不可能になります) を使用してイベント/コールバックを実装します。おそらく、Figueira 氏のコードはそれらのコールバックを Window メッセージに変換します。

[1] Bluetooth 仮想 COM ポートの作成は簡単ではありません。MSFT+Win32 では、COM ポートに選択された名前がわかりません! MSFT+WM では、公式 API が多くのデバイス タイプでうまく機能しません。非公式の方法では、IIRC を再起動する必要があります。:-(

于 2010-01-14T11:33:49.110 に答える
1

最初に、 32feet.netを使用できないと言います。なんで?あなたは明らかにJoão Paulo Figueiraのbluetoothスタックライブラリを使用しています.wcbts.dllがそうであるため、サードパーティのライブラリを使用することを強制することはできません(32feetは無料でオープンソースです)。

それは私に質問#2をもたらします。彼のライブラリを使用している場合、そのライブラリの使用方法に関する彼のサンプルを見ましたか? これは、必要なDLL と同じ場所からダウンロードされます。

hWnd と nMsg については、これが Windows プログラミングであり、API の名前であるという事実に基づいて、hWnd はライブラリで何かが発生したときに通知を受け取るウィンドウのハンドルであり、nMsg は任意のカスタムであると言えます。そのウィンドウに渡したいメッセージ定数を指定して、それらのメッセージを探すことができるようにします。繰り返しますが、彼が提供するサンプルがこれらすべてを示しているに違いありません。

于 2010-01-05T13:59:05.037 に答える