Кто-нибудь уже выяснил, как получить BLE Beacons в настольных приложениях C++?Получение маяков BLE на C++ Windows 10 Desktop Application
У меня есть некоторый код из следующих веб-сайтах, чтобы сделать это в C#:
msdn sozial site
и
codefest.at post. К сожалению, это на немецком языке, но код является кодом
но that'for C# и не с ++
у меня также есть пример из MS (msdn.microsoft.com/en-us/library/hh973459.aspx), как использовать WinRL
на данный момент у меня й е следующий код:
#include "stdafx.h"
#include <iostream>
#include <Windows.Foundation.h>
#include <wrl\wrappers\corewrappers.h>
#include <wrl\client.h>
#include <stdio.h>
#include <../winrt/windows.devices.bluetooth.h>
#include <../winrt/windows.devices.bluetooth.advertisement.h>
using namespace std;
using namespace Microsoft::WRL;
using namespace Microsoft::WRL::Wrappers;
using namespace ABI::Windows::Foundation;
using namespace ABI::Windows::Devices::Bluetooth::Advertisement;
/* http://www.codefest.at/post/2015/09/07/Bluetooth-Beacons-Windows-10.aspx
private async void WatcherOnReceived(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
{
_beaconManager.ReceivedAdvertisement(eventArgs);
}
var watcher = new BluetoothLEAdvertisementWatcher { ScanningMode = BluetoothLEScanningMode.Active };
watcher.Received += WatcherOnReceived;
watcher.Stopped += WatcherOnStopped;
watcher.Start();
*/
// Prints an error string for the provided source code line and HRESULT
// value and returns the HRESULT value as an int.
int PrintError(unsigned int line, HRESULT hr)
{
wprintf_s(L"ERROR: Line:%d HRESULT: 0x%X\n", line, hr);
return hr;
}
EventRegistrationToken watcherToken;
int main()
{
// Initialize the Windows Runtime.
RoInitializeWrapper initialize(RO_INIT_MULTITHREADED);
if (FAILED(initialize))
{
return PrintError(__LINE__, initialize);
}
// Get the activation factory for the IBluetoothLEAdvertisementWatcherFactory interface.
ComPtr<IBluetoothLEAdvertisementWatcherFactory> bleAdvWatcherFactory;
HRESULT hr = GetActivationFactory(HStringReference(RuntimeClass_Windows_Devices_Bluetooth_Advertisement_BluetoothLEAdvertisementWatcher).Get(), &bleAdvWatcherFactory);
if (FAILED(hr))
{
return PrintError(__LINE__, hr);
}
IBluetoothLEAdvertisementWatcher* bleWatcher;
IBluetoothLEAdvertisementFilter* bleFilter;
hr = bleAdvWatcherFactory->Create(bleFilter, &bleWatcher);
if (bleWatcher == NULL)
{
cout << "bleWatcher is NULL, err is " << hex << hr;
}
else
{
bleWatcher->Start();
while (1)
Sleep(1000);
}
return 0;
}
моя проблема заключается в том, что Watcher Factory жалуется (ч = E_INVALIDARG «один или более аргументов не являются действительными» 0x80070057), что одна из переменных не является допустимым (я подозреваю, что фильтр, потому что он имеет нет действительного контента).
И даже на том же уровне серьезности я понятия не имею, как зарегистрировать обработчик событий для входящих маяков.
msdn.microsoft.com/en-us/library/windows/apps/windows.devices.bluetooth.advertisement.bluetoothleadvertisementwatcher.received?cs-save-lang=1 & CS-Ланг = касты говорят мне что-то о Полученном событии. Но у меня его нет в моей автозаполнении от VS, а не в ручном поиске в файле заголовка. Следующее, что у меня есть, это «add_Received», но я не могу найти документацию об этом, как использовать. И я не получаю гораздо более мудрый из файла заголовка.
Заранее благодарим за советы и рекомендации или даже за рабочее решение.
Markus
Я также строит здесь то же самое. Моя проблема теперь, когда я запускаю ее, я получаю ошибку: «failure -2147221164», которая является «классом не зарегистрирована» при попытке создать фабричный объект. Я компилирую с выпуском MSVC Community «14.11.25503» и связываюсь с win10 SDK «10.0.16299.0». Нужно ли что-либо делать, чтобы зарегистрировать классы DLL? – peterk