当前位置:编程学习 > wap >>

关于搜索蓝牙设备 调用WSALookupServiceBegin 的问题

小弟才接触蓝牙开发
为何调用
WSALookupServiceBegin
API 时返回失败,错误码  10108
2台PC的蓝牙模块均打开,互相可见并传送文件,先谢谢各位大侠了
代码如下:
BOOL test()
{
WSADATA wsd;
WSAStartup (MAKEWORD(1,0), &wsd);
WSAQUERYSET wsaq;
HANDLE hLookup;
union {
CHAR buf[5000];
double __unused; // ensure proper alignment
};

LPWSAQUERYSET pwsaResults = (LPWSAQUERYSET) buf;
DWORD dwSize = sizeof(buf);
BOOL bHaveName;
ZeroMemory(&wsaq, sizeof(wsaq));
wsaq.dwSize = sizeof(wsaq);
wsaq.dwNameSpace = NS_BTH;
wsaq.lpcsaBuffer = NULL;
if (ERROR_SUCCESS != WSALookupServiceBegin (&wsaq, LUP_CONTAINERS, &hLookup))
{
wprintf(L"WSALookupServiceBegin failed %d\r\n", GetLastError());
return FALSE;
}

ZeroMemory(pwsaResults, sizeof(WSAQUERYSET));
pwsaResults->dwSize = sizeof(WSAQUERYSET);
pwsaResults->dwNameSpace = NS_BTH;
pwsaResults->lpBlob = NULL;
while (ERROR_SUCCESS == WSALookupServiceNext (hLookup, LUP_RETURN_NAME | LUP_RETURN_ADDR, &dwSize, pwsaResults))
{
ASSERT (pwsaResults->dwNumberOfCsAddrs == 1);
BT_ADDR b = ((SOCKADDR_BTH *)pwsaResults->lpcsaBuffer->RemoteAddr.lpSockaddr)->btAddr;
bHaveName = pwsaResults->lpszServiceInstanceName && *(pwsaResults->lpszServiceInstanceName);
wprintf (L"%s%s%04x%08x%s\n", bHaveName ? pwsaResults->lpszServiceInstanceName : L"", bHaveName ? L"(" : L"", GET_NAP(b), GET_SAP(b), bHaveName ? L")" : L"");
}
WSALookupServiceEnd(hLookup);
         WSACleanup();
} --------------------编程问答-------------------- 你用的是sp2自带的蓝牙驱动马? --------------------编程问答-------------------- WSAStartup (MAKEWORD(2,2), &wsd);
试一下 --------------------编程问答-------------------- 我也在搞 --------------------编程问答-------------------- 关注!我也在搞这一块。
帮忙顶一下。。。 --------------------编程问答-------------------- mark --------------------编程问答-------------------- 我的也是,总是返回10108的错误.
不知道楼主是否已经解决了? --------------------编程问答-------------------- 我也遇到相同的问题
谁解决了,把解决办法贴出来一下啊 --------------------编程问答-------------------- static int PerformServiceSearch (BT_ADDR *pb) 
{
  CoInitializeEx (0, COINIT_MULTITHREADED);
  int iResult = 0;
  BTHNS_RESTRICTIONBLOB RBlob;
  memset (&RBlob, 0, sizeof(RBlob));
  RBlob.type = SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST;
  RBlob.numRange = 1;
  RBlob.pRange[0].minAttribute = SDP_ATTRIB_PROTOCOL_DESCRIPTOR_LIST;
  RBlob.pRange[0].maxAttribute = SDP_ATTRIB_PROTOCOL_DESCRIPTOR_LIST;
  RBlob.uuids[0].uuidType = SDP_ST_UUID16;
  RBlob.uuids[0].u.uuid16 = SerialPortServiceClassID_UUID16;
  BLOB blob;
  blob.cbSize = sizeof(RBlob);
  blob.pBlobData = (BYTE *)&RBlob;
  SOCKADDR_BTH sa;
  memset (&sa, 0, sizeof(sa));
  *(BT_ADDR *)(&sa.btAddr) = *pb;
  sa.addressFamily = AF_BT;
  CSADDR_INFO csai;
  memset (&csai, 0, sizeof(csai));
  csai.RemoteAddr.lpSockaddr = (sockaddr *)&sa;
  csai.RemoteAddr.iSockaddrLength = sizeof(sa);
  WSAQUERYSET wsaq;
  memset (&wsaq, 0, sizeof(wsaq));
  wsaq.dwSize      = sizeof(wsaq);
  wsaq.dwNameSpace = NS_BTH;
  wsaq.lpBlob      = &blob;
  wsaq.lpcsaBuffer = &csai;
  HANDLE hLookup;
  int iRet = WSALookupServiceBegin (&wsaq, 0, &hLookup);
  if (ERROR_SUCCESS == iRet) 
{
    CHAR buf[5000];
    LPWSAQUERYSET pwsaResults = (LPWSAQUERYSET) buf;
    DWORD dwSize  = sizeof(buf);
    memset(pwsaResults,0,sizeof(WSAQUERYSET));
    pwsaResults->dwSize      = sizeof(WSAQUERYSET);
    pwsaResults->dwNameSpace = NS_BTH;
    pwsaResults->lpBlob      = NULL;
    iRet = WSALookupServiceNext (hLookup, 0, &dwSize, pwsaResults);
    if (iRet == ERROR_SUCCESS) // Success - got the stream
    {
      //Parse the SDP result set by using the FindRFCOMMChannel function.
      if (ERROR_SUCCESS == FindRFCOMMChannel (pwsaResults->lpBlob->pBlobData, pwsaResults->lpBlob->cbSize, &cChannel))
      iResult = cChannel;
    }
    WSALookupServiceEnd(hLookup);
  }
  CoUninitialize ();
  return iResult;
} --------------------编程问答-------------------- 楼主, byte_c, 你们的代码中pwsaResults- >dwNameSpace   =   NS_BTH; 我的会出现:
error C2065: 'NS_BTH' : undeclared identifier
我的开发平台是: Window XP + VC++ 6.0
包含了头文件和库:
#include "Winsock2.h"
#pragma comment(lib, "ws2_32.lib")

还有很多关于蓝牙的标识也无法识别: 如:BT_ADDR addrBT;中的BT_ADDR
我要如何处理了?

也正在为使用蓝牙设备发愁。
一起学习吧,我的MSN:lu_tianfa@hotmail.com
--------------------编程问答-------------------- NS_BTH没有定义可以通过修改Stdafx.h中的#define _WIN32_IE 0x0501为#define _WIN32_IE 0x0600解决
BT_ADDR没有定义应该改为BTH_ADDR --------------------编程问答-------------------- 我读用WSA系列函数,都很正常,楼主的为啥不行? --------------------编程问答-------------------- to yigerengudu

error C2065: 'NS_BTH' : undeclared identifier 

可能是沒有安裝PSDK
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm

安裝之後會有header跟lib

--------------------编程问答-------------------- 接分先! --------------------编程问答-------------------- 这个简单啊,网上搜一下就得到答案了. --------------------编程问答-------------------- 不知,帮顶 --------------------编程问答-------------------- FindRFCOMMChannel 这个函数在那里有,是自己写的吗?求此函数。。
8楼漏掉了一句
typedef ULONGLONG bt_addr, *pbt_addr, BT_ADDR, *PBT_ADDR; --------------------编程问答-------------------- 我也刚在学习这一块。。。帮顶!!! --------------------编程问答-------------------- vc supe易做图n交流群,88739253,想交流vc的同志们请加进来吧。里面有高手哦。 --------------------编程问答-------------------- 请问你最后问题是怎么解决的?谢谢 --------------------编程问答-------------------- msdn上是这样说的,也就是只有在vista及以后的版本才能识别NS_BTH。但是为什么有的在xp系统下也能识别呢?不懂,请高手解释解决方案
NS_BTH  The Bluetooth namespace. This namespace identifier is supported on Windows Vista and later.
  --------------------编程问答-------------------- 同问,再次翻出来
补充:移动开发 ,  移动开发其他问题
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,