我正在尝试使用Broadcomm的Widcomm蓝牙堆栈,它应该可以工作,但有一件事我仍然不能理解:当我需要通信时,我如何自动打开虚拟COM?
我正在尝试使用SPP (串行端口配置文件),但是SDK的文档并不是那么令人兴奋。
求你,我就是不能用32FEET!
我包装了API的SPP Server部分:
[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?
谢谢
发布于 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端口,并尝试找到它创建的套接字的名称,然后必须打开一个套接字才能使用它,然后如果连接丢失,人们不知道,只能继续重试……只需执行以下操作就会简单得多:
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。:-(
发布于 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是您希望传递给该窗口的任何自定义消息常量,以便您能够查找这些消息。再一次,我打赌他提供的样本显示了这一切。
https://stackoverflow.com/questions/2004730
复制相似问题