首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Widcomm蓝牙:如何打开虚拟通信

Widcomm蓝牙:如何打开虚拟通信
EN

Stack Overflow用户
提问于 2010-01-05 16:12:53
回答 2查看 9.7K关注 0票数 0

我正在尝试使用Broadcomm的Widcomm蓝牙堆栈,它应该可以工作,但有一件事我仍然不能理解:当我需要通信时,我如何自动打开虚拟COM?

我正在尝试使用SPP (串行端口配置文件),但是SDK的文档并不是那么令人兴奋。

求你,我就是不能用32FEET!

我包装了API的SPP Server部分:

代码语言:javascript
复制
    [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?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-14 19:33:49

我之前发布了一个回复,但它似乎从来没有出现过!:-(

无论如何,我是32feet.NET库的维护者和Widcomm support的作者。首先,据我所知,许可证不应该是商业发行的问题。请参阅彼得·福特在http://32feet.net/forums/t/2289.aspx上的评论

"32feet.NET可免费用于商业或非商业用途。如果使用二进制文件,则可以按原样使用库;如果对源代码进行修改,则需要包含32feet.NET License.txt文档,并确保不会修改/删除文件头。“

我会看看Peter是否可以在这里发表评论来给出确定性。

无论如何,我们还没有实现对Widcomm虚拟COM端口功能的支持(这当然是可能的,尽管除了您之外没有人要求它)。我不是虚拟COM端口的狂热粉丝。使用直接的“SerialPort”连接似乎要容易得多,而不是尝试设置一个COM端口,并尝试找到它创建的套接字的名称,然后必须打开一个套接字才能使用它,然后如果连接丢失,人们不知道,只能继续重试……只需执行以下操作就会简单得多:

代码语言:javascript
复制
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/调用几乎不可能)来实现事件/回调,大概是Figueira先生的代码将这些回调转换为窗口消息。

1创建蓝牙虚拟COM端口并不简单。在MSFT+Win32上,用户不会被告知为COM端口选择了什么名称!在MSFT+WM上,官方的应用程序接口在许多设备类型上都不能很好地工作。我们的非官方方法需要重启IIRC。:-(

票数 2
EN

Stack Overflow用户

发布于 2010-01-05 21:59:05

所以首先你说你不能使用32feet.net。为什么?你显然是在使用João Paulo Figueira's bluetooth stack library,因为wcbts.dll就是这样的,所以它不能被强制要求使用一些第三方的库(而且32英尺是免费的和开源的)。

这就引出了第二个问题:如果你正在使用他的库,你有没有看过他关于如何使用这个库的示例?这是从你一定有的same place as the DLL下载的。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2004730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档