关于搜索蓝牙设备 调用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.
--------------------编程问答-------------------- 同问,再次翻出来
补充:移动开发 , 移动开发其他问题