0

我正在尝试使用 Broadcomm 的 Widcomm 蓝牙堆栈,它应该可以工作,但是我仍然无法理解一件事:当我需要通信时,如何自动打开虚拟 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 支持的作者。首先,据我所知,许可证对于商业发行应该不是问题。请参阅 Peter Foot 在http://32feet.net/forums/t/2289.aspx的评论:

“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 问题。可以创建蓝牙服务的多个实例,即多个 SPP 服务(每个都使用 SPP 服务类 ID),每个都可以提供服务名称属性以允许客户端在它们之间进行选择。在大多数情况下,这不是必需的,因此只需传递 null 或零长度字符串 - Widcomm SDK 文档没有说明允许的内容。至于窗口句柄,Widcomm 使用 C++ 虚拟方法(yuk——这使得直接P/Invoking 几乎不可能)来实现事件/回调,大概是 Figueira 先生的代码将这些回调转换为 Window 消息。

[1] 创建蓝牙虚拟 COM 端口并不简单。在 MSFT+Win32 上,不知道为 COM 端口选择了什么名称!在 MSFT+WM 上,官方 API 在许多设备类型上都无法正常工作。我们的非官方方法需要重启 IIRC。:-(

于 2010-01-14T11:33:49.110 回答
1

所以首先你说你不能使用32feet.net。为什么?您显然在使用João Paulo Figueira 的蓝牙堆栈库,因为这就是 wcbts.dll,所以不能强制要求使用某些 3rd 方库(并且 32feet 是免费和开源的)。

这让我想到了问题 #2。如果您正在使用他的库,您是否看过他关于如何使用该库的示例?它是从与您必须拥有的 DLL 相同的位置下载的。

至于 hWnd 和 nMsg 是什么,仅基于这是 Windows 编程和 API 的名称这一事实,我会说 hWnd 是窗口的句柄,当库中发生某些事情时会收到通知,而 nMsg 是任何自定义您希望传递给该窗口的消息常量,以便您能够查找这些消息。同样,我打赌他提供的样本显示了所有这些。

于 2010-01-05T13:59:05.037 回答