获取本地蓝牙地址

时间:2016-07-22 13:25:41

标签: c++ c windows bluetooth windows-ce

我正在尝试使用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的有效文档,它没有引用不存在的文件?谢谢。

0 个答案:

没有答案