Pergunta

Estou tentando usar a pilha WidComm Bluetooth da BroadComm e ela deve funcionar, mas há uma coisa que ainda não consigo entender: como posso abrir automaticamente o Com o Virtual quando preciso me comunicar?

Estou tentando usar o SPP (perfil da porta serial), mas a documentação com o SDK não é tão exaustiva.

Por favor, eu simplesmente não posso usar 32feet!

Eu enrolei a parte do servidor spp da API:

    [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);

O que é PszServicename? onde posso encontrar? e hwnd e nmsg ???

Obrigado

Foi útil?

Solução

Publiquei uma resposta a isso antes, mas parece nunca ter aparecido! :-(

De qualquer forma, sou o mantenedor da biblioteca 32feet.net e o autor do WidComm Support. Em primeiro lugar, até onde eu sei, a licença não deve ser um problema para a distribuição comercial. Veja o comentário de Peter Foot em http://32feet.net/forums/t/2289.aspx:

"32feet.net é gratuito para uso comercial ou não comercial. Se você usar os binários, poderá usar a biblioteca AS-IS, se você fizer modificações na fonte, precisará incluir o documento 32feet.net.txt e garantir Os cabeçalhos do arquivo não são modificados/removidos. "

Vou ver se Peter pode postar um comentário aqui para dar certeza.

De qualquer forma, não implementamos o suporte para a funcionalidade do WidComm Virtual COM Port, (certamente é possível, embora ninguém tenha pedido - além de si mesmo). Eu não sou um grande fã de portas com comções virtuais. Sempre parece muito mais fácil usar uma conexão direta de 'soquetes', em vez de tentar configurar uma porta COM, e tentar descobrir que nome foi criado como [1], e depois tem que abrir um Serialport para usá -lo e, em seguida, Se a conexão é perdida, não sabe e simplesmente precisa continuar novamente ... é muito mais fácil apenas fazer o seguinte:

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 ...

Veja mais em http://www.alanjmcf.me.uk/comms/bluetooth/32feet.net%20--%20User%20Guide.html

Para responder às suas perguntas específicas do Widcomm. Várias instâncias de um serviço Bluetooth podem ser criadas, ou seja, vários serviços SPP (cada um usando o ID da classe de serviço SPP), cada um pode fornecer um atributo de nome de serviço para permitir que os clientes selecionem entre eles. Na maioria dos casos, não será necessário, portanto, basta passar na string nula ou em um comprimento zero-os documentos do WidComm SDK não dizem o que é permitido. Quanto às alças da janela, o widcomm usa métodos virtuais C ++ (yuk - isso faz direto P/Invocando principalmente impossível) Implementar eventos/retornos de chamada, presumivelmente o código do Sr. Figueira converte esses retornos de chamada em mensagens de janela.

1] A criação de portas com com COM virtual Bluetooth não é direta. No MSFT+Win32, um não é informado que nome foi selecionado para a porta COM! No MSFT+WM, a API oficial não funciona bem em muitos tipos de dispositivos. E nosso método não oficial de fazê -lo requer uma reinicialização. :-(

Outras dicas

Então, primeiro você diz que não pode usar 32feet.net. Por quê? Você está obviamente usando João Paulo Figueira Biblioteca Bluetooth, porque é isso que o WCBTS.DLL é, por isso não pode ser algum mandato contra o uso de uma biblioteca de terceiros (e 32feet é gratuita e de código aberto).

Isso me leva à pergunta nº 2. Se você está usando a biblioteca dele, já olhou para a amostra dele sobre como usar essa biblioteca? É baixado do Mesmo lugar que a DLL você deve ter.

Quanto ao que são HWND e NMSG, apenas com base no fato de que é a programação do Windows e o nome da API, eu diria Constante de mensagem que você deseja passar para essa janela para poder procurar essas mensagens. Novamente, estou apostando que a amostra que ele fornece mostra tudo isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top