Windows mobile Widcomm蓝牙:如何打开虚拟COM

Windows mobile Widcomm蓝牙:如何打开虚拟COM,windows-mobile,stack,bluetooth,broadcom,Windows Mobile,Stack,Bluetooth,Broadcom,我正在尝试使用Broadcomm的Widcomm蓝牙协议栈,它应该可以工作,但有一件事我仍然无法理解:当我需要通信时,如何自动打开虚拟COM 我正在尝试使用SPP(串行端口配置文件),但SDK的文档并没有那么详尽 求你了,我不能用32英尺 我包装了API的SPP服务器部分: [DllImport("wcbts.dll", SetLastError = false, CharSet = CharSet.Unicode)] internal static extern IntPtr

我正在尝试使用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


谢谢

所以首先你说你不能使用。为什么?很明显,您正在使用,因为wcbts.dll就是这样的,所以不能强制要求您使用第三方库(32feet是免费的,开源的)

这就引出了问题2。如果你正在使用他的图书馆,你有没有看过他关于如何使用图书馆的示例?它是从您必须拥有的网站下载的


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

所以首先你说你不能使用。为什么?很明显,您正在使用,因为wcbts.dll就是这样的,所以不能强制要求您使用第三方库(32feet是免费的,开源的)

这就引出了问题2。如果你正在使用他的图书馆,你有没有看过他关于如何使用图书馆的示例?它是从您必须拥有的网站下载的


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

我之前发布了对此的回复,但似乎从未出现过!:-(

无论如何,我是32feet.NET库的维护者,也是Widcomm支持的作者。首先,据我所知,商业发行不应该存在许可证问题。请参阅Peter Foot的评论:

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

我会看看彼得是否能在这里发表评论,给出肯定的答案

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

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 ...
更多信息请访问

回答您特定的Widcomm问题。可以创建蓝牙服务的多个实例,即多个SPP服务(每个都使用SPP服务类Id)大多数情况下,它都是不需要的,所以只需传递空或零长度字符串——WiMCOM SDK文档就不说允许的。至于窗口句柄,Widcomm使用C++虚拟方法(YUK——这使得直接P/调用几乎不可能)。为了实现事件/回调,Figueira先生的代码可能会将这些回调转换为窗口消息


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

我之前发布了对此的回应,但似乎从未出现过!:-(

无论如何,我是32feet.NET库的维护者,也是Widcomm支持的作者。首先,据我所知,商业发行不应该存在许可证问题。请参阅Peter Foot的评论:

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

我会看看彼得是否能在这里发表评论,给出肯定的答案

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

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 ...
更多信息请访问

回答您特定的Widcomm问题。可以创建蓝牙服务的多个实例,即多个SPP服务(每个都使用SPP服务类Id)大多数情况下,它都是不需要的,所以只需传递空或零长度字符串——WiMCOM SDK文档就不说允许的。至于窗口句柄,Widcomm使用C++虚拟方法(YUK——这使得直接P/调用几乎不可能)。实施事件/回调,大概是Figu先生