win10 UWA app:使用winsock2,编译器忽略了ws2bth.h:找不到BTHPROTO_RFCOMM

时间:2016-03-29 16:17:51

标签: c++ bluetooth windows-10-universal winsock2

我尝试使用winsock2 API在我的PC和目标设备之间创建蓝牙连接。我使用VS 2015创建了一个新的通用Windows应用程序(C ++),并开始使用win32应用程序实现我以前使用的代码,并且在MainPage.xaml.cpp中运行良好。

我收到错误:未定义标识符BTHPROTO_RFCOMM和SOCKADDR_BTH。它们都在ws2bth.h中定义并包含在我的代码中。

我找不到任何原因导致我的代码无法正常工作,因为ws2bth.h没有找到与Univeral Windows App不兼容的任何内容。

希望你能在这里帮助我。

-Christian

编辑:我实际上可以通过右键单击我的MainPage.xaml.cpp中的BTHPROTO_RFCOMM跳转到该定义,但错误仍然存​​在。

#define WIN32_LEAN_AND_MEAN 1

#include "pch.h"
#include "MainPage.xaml.h"
#include <stdio.h>
#include <winsock2.h>
#include <ws2bth.h>

#pragma comment(lib, "ws2_32.lib")

SOCKET clientSocket;

using namespace MoodlightControl;

using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;


MainPage::MainPage()
{
    InitializeComponent();
}

int startWinsock() {
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    // Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h 
    wVersionRequested = MAKEWORD(2, 2);
    err = WSAStartup(wVersionRequested, &wsaData);

    if (err != 0) 
        return 0;



    // Check, if Winsock2.2.dll supported                                       
    if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
        WSACleanup();
        return 0;
    }

    else
        return 1;
}

int connect() {
    clientSocket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);

    if (clientSocket == INVALID_SOCKET)
        return 1;

    SOCKADDR_BTH bth_addr;

    bth_addr.addressFamily = AF_BTH;
    bth_addr.btAddr = 0x98D331FD02D9;
    bth_addr.port = 1;

    if (connect(clientSocket, (struct sockaddr *) &bth_addr, sizeof(SOCKADDR_BTH)) == SOCKET_ERROR) {
        return 1;
    }
return 0;
}

0 个答案:

没有答案