我尝试使用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;
}