Используйте более новый API Windows 10 в настольных приложениях

Мы разрабатываем настольное приложение, для которого требуется подключение Bluetooth LE. Можно использовать Bluetooth API Windows 10 в настольных приложениях, но, насколько я могу судить, нет доступа к новым функциям API.

Тип BluetoothAdapter, например, недоступен. из классического приложения Windows 10 с установленным пакетом nuget UwpDesktop. Есть ли другой способ получить доступ к новым функциям Windows 10? Конкретная функция, которую мы ищем, — это услуги BLE GATT без сопряжения.


person Wouter    schedule 17.05.2018    source источник


Ответы (1)


Вы можете использовать более новые API-интерфейсы Windows 10, ссылаясь на файлы winmd из более новых пакетов SDK для Windows 10. Стандартный набор ссылок указан на https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-enhance

Это означает, что последние двоичные файлы SDK можно найти в следующих местах:

C:\Program Files (x86)\Windows Kits\10\UnionMetadata\Facade\Windows.WinMD
C:\Program Files (x86)\Windows Kits\10\References\10.0.17134.0\Windows.Foundation.FoundationContract\3.0.0.0\Windows.Foundation.FoundationContract.winmd
C:\Program Files (x86)\Windows Kits\10\References\10.0.17134.0\Windows.Foundation.UniversalApiContract\6.0.0.0\Windows.Foundation.UniversalApiContract.winmd
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.UI.Xaml.dll

Чтобы узнать, поддерживается ли определенный API, вам нужно проверить, есть ли у него атрибут DualApiPartitionAttribute.

person Wouter    schedule 17.05.2018
comment
Просто примечание: атрибут DualApiPartition является подсказкой, но он не идеален... некоторые вещи, у которых нет этого атрибута, все равно будут работать. - person Peter Torr - MSFT; 21.05.2018
comment
@PeterTorr-MSFT применимо ли это и наоборот? Использование DevicePicker на рабочем столе всегда вызывает исключение, даже если он имеет указанный интерфейс. - person Wouter; 21.05.2018
comment
Да, но это похоже на ошибку. Какой конкретный API не работает? - person Peter Torr - MSFT; 21.05.2018
comment
DevicePicker.PickSingleDeviceAsync (и другие вызовы пользовательского интерфейса) вызывают следующее исключение: интерфейс не зарегистрирован (исключение из HRESULT: 0x80040155) - person Wouter; 22.05.2018
comment
При таком использовании WinRT возникают некоторые проблемы. Интерфейсы WinRT лучше импортировать из заголовков и использовать как простые COM-интерфейсы. Но это требует много кодирования. Вы можете сэкономить время, используя Bluetooth Framework. - person Mike Petrichenko; 22.05.2018