当前位置: 代码迷 >> Windows Mobile >> Smartphone 蓝牙虚拟串口, 注册服务失败解决办法
  详细解决方案

Smartphone 蓝牙虚拟串口, 注册服务失败解决办法

热度:238   发布时间:2016-04-25 07:53:03.0
Smartphone 蓝牙虚拟串口, 注册服务失败
标题: 蓝牙虚拟串口, 注册服务失败

void CBlueTestDlg::OnBnClickedButton1()
{
  // 注册服务
  PORTEMUPortParams pp ;
  ZeroMemory(&pp, sizeof(pp));
  pp.channel = RFCOMM_CHANNEL_MULTIPLE ;// the next available channel
  pp.flocal = TRUE;  
GetBA(_T("000b244ada77"), &pp.device);

  int nIndex = 1;
  HANDLE m_hDev = RegisterDevice(_T("COM"), nIndex, _T("btd.dll"), (DWORD)&pp);
  //这里会返回错误, 错误代码为2404, 意思为" 设备正由活动进程使用,无法断开。" 
  CString sErr ;
  sErr.Format(_T("Error %d,RegisterDevice!"), GetLastError()) ;
  if (m_hDev == 0)
  {
  MessageBox(sErr, _T("ERROR")) ; 
  }
}

可是我看网上的类似代码,都说这里会成功,不知什么原因,请各位大大指点一下!

------解决方案--------------------
改变nIndex值,尝试其他的
------解决方案--------------------
通过虚拟串口连接蓝牙设备需要3个条件:
1.被连接设备的地址;
2.被连接设备提供的连接通道;
3.本机的一个虚拟COM;

就我自己在这方面的经验来说,第二个条件最难得到。看了楼主自己的做法以及你提到的别人的做法,这个连接通道,都是直接指定的,这个,我不敢说有什么问题,但是至少我这样做,没有成功过。

如果有兴趣,你可以做这样一个测试:获取设备地址之后,注册虚拟端口时,循环测试通道和COM口的每一种组合。因为,连接通道是在1-31之间的,而虚拟COM口,也就在0-9之间(实际上,我用的几款多谱达的手机,只支持COM6和COM7)。这样下来,组合情况也没多少:
PORTEMUPortParams pp;
memset(&pp,0,sizeof(pp));
pp.device = btAddr;
pp.uiportflags = RFCOMM_PORT_FLAGS_REMOTE_DCB;
for(int m = 1;m <= 31;m++)
{
pp.channel = m & 0xFF;
BOOL bSuccess = FALSE;
for(int n = 0; n <= 9; n++)
{
hDev = RegisterDevice(_T("COM"),n,_T("btd.dll"),(DWORD)&pp);
if(hDev )
{
bSuccess = TRUE;
BREAK;
}
}
if(bSuccess )
break;
}

看看能否注册成功。
  相关解决方案