我正在尝试使用Broadcomm的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 ???
由于
答案 0 :(得分: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文档没有说明允许的内容。至于Window句柄,Widcomm使用C ++虚拟方法(yuk - 这使直接 P /调用几乎不可能)来实现事件/回调,可能是Figueira先生的代码将这些回调转换为Window消息。
[1]创建蓝牙虚拟COM端口并不简单。在MSFT + Win32上,不会告诉您为COM端口选择了什么名称!在MSFT + WM上,官方API在许多设备类型上都不能很好地工作。我们非官方的做法需要重启IIRC。 : - (
答案 1 :(得分: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发生某些事情时它会收到通知是您希望传递给该窗口的任何自定义消息常量,以便您能够查找这些消息。再一次,我打赌他提供的样本显示了所有这些。