我正在尝试使用Microsoft蓝牙堆栈获取本地设备的蓝牙地址。我的目标是Windows CE 6.0设备。
在MSDN上,我找到了以下代码示例:
SOCKADDR_BTH sab;
int len = sizeof(sab);
if (0 == getsockname (s, &sab, &len)) {
wprintf (L"Local Bluetooth device is %04x%08x, server channel = %d\n",
GET_NAP(sab.btAddr), GET_SAP(sab.btAddr), sab.port);
}
在:https://msdn.microsoft.com/en-us/library/ee495768(v=winembedded.60).aspx
在这个例子中,没有声明s,所以我假设它只是一个有效的套接字......
以下是我根据此示例编写的代码:
SOCKET s = socket( AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM );
if( s == INVALID_SOCKET )
{
return false;
}
SOCKADDR_BTH sab;
int len = sizeof( sab );
if( 0 == getsockname(s, (sockaddr *) & sab, & len ) )
{
// Use the BT address here
closesocket( s );
return true;
}
else
{
closesocket( s );
return false;
}
我不得不将SOCKADDR_BTH *
强制转换为sockaddr *
,因为编译器不会让我编译它,不像示例所允许的那样。
这给我一个10022的错误代码,表明我提供了一个无效的参数,由于我不得不做这种奇怪的演员,这并不奇怪。
我还尝试了另一种涉及函数BthReadLocalAddr
的方法,该方法在MSDN上记录:https://msdn.microsoft.com/en-us/library/ms887876.aspx
该函数确实在Bt_api.h
中声明,但CE 6.0 SDK中没有Btdrt.lib
。但是有一个Btd.lib
,但它似乎不包含该函数的定义,因为我得到了一个未解决的外部链接错误,这并不奇怪。
我怎样才能让它发挥作用?也许找到一个关于MS蓝牙API的有效文档,它没有引用不存在的文件?谢谢。