[Bluetooth]使用COM端口分析SDP记录(转载)

 
Microsoft® Windows® CE 提供了COM接口,可以用来以流的形式分析SDP记录。ISdpStream 定义了处理流数据的方法。在你的程序获取SDP记录之前,使用 ISdpStream::Validate方法来确保原始的SDP流是有效的并且格式正确,也可以使用ISdpStream::VerifySequenceOf方法来确保原始SDP数组中的元素是有效的。使用ISdpStream::RetrieveRecords方法来获取流数据,这个方法返回SDP记录到一个ISdpRecord数组中并且返回记录的总数。然后你可以使用ISdpRecord方法来对SDP记录进行操作,例如获取SDP服务记录的属性。更多信息参见Searching SDP Attributes Using COM Interfaces.
STDMETHODIMP
ServiceAndAttributeSearchParse(
 UCHAR *szResponse,   // in – 指向SDP记录的缓冲区,二进制格式
                       // 由Bthnscreate示例获得
 DWORD cbResponse,   // in – szResponse 的大小
 ISdpRecord ***pppSdpRecords, // out – pSdpRecords 的数组
 ULONG *pNumRecords   // out – pSdpRecords 数组中的元素个数
)
{
 
 HRESULT hres = E_FAIL;
 *pppSdpRecords = NULL;
 *pNumRecords = 0;
 ISdpStream *pIStream = NULL;
// 创建一个流对象
if (FAILED(CoCreateInstance(__uuidof(SdpStream),NULL,CLSCTX_INPROC_SERVER,
                        __uuidof(ISdpStream),(LPVOID *) &pIStream)))
{
 return E_FAIL;
}
// 确保SDP流是有效的并且格式正确
 hres = pIStream->Validate(szResponse,cbResponse,NULL);
 
 if (SUCCEEDED(hres))
 {
 // 确保SDP流的序列是有效的并且格式正确
    hres = pIStream->VerifySequenceOf(szResponse,cbResponse,
                       SDP_TYPE_SEQUENCE,NULL,pNumRecords);
    if (SUCCEEDED(hres) && *pNumRecords > 0)
    {
      *pppSdpRecords = (ISdpRecord **)
      // 为SDP记录缓冲区分配内存空间
      CoTaskMemAlloc(sizeof(ISdpRecord*) * (*pNumRecords));
      if (pppSdpRecords != NULL)
      {
         // 从流中获取SDP记录
         hres = pIStream->RetrieveRecords ( szResponse,
                    cbResponse,*pppSdpRecords,pNumRecords);
        // 如果获取记录失败,释放已分配的内存,设SDP记录总数为0
        if (!SUCCEEDED(hres))
        {
            CoTaskMemFree(*pppSdpRecords);
            *pppSdpRecords = NULL;
            *pNumRecords = 0;
         }
       }
       else
       {
          hres = E_OUTOFMEMORY;
       }
     }
 }
 // Release the stream.
 if (pIStream != NULL)
 {
    pIStream->Release();
    pIStream = NULL;
 }
 return hres;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值