К какому типу API WinRT у меня есть доступ из приложения Qt?

Я использую порт Qt 5.6 Alpha WinRT в Windows 10 и хочу получить доступ к WinRT Wifi Direct API из приложения Qt.

Я знаю, что для этого следует использовать WRL. Но я получаю другое поведение, используя API Wifi Direct в своем приложении и пробуя универсальный пример Windows из репозиторий Microsoft на GitHub. В частности, я получаю E_NOTIMPL при попытке активировать WiFiDirectDevice, в то время как образец от Microsoft работает нормально.

HStringReference strDevice(RuntimeClass_Windows_Devices_WiFiDirect_WiFiDirectDevice);

ComPtr<IInspectable> insp;
hr = RoActivateInstance(strDevice.Get(), insp.GetAddressOf());

Итак, я не понимаю, какой тип API я вызываю (магазин Windows или рабочий стол) из приложения Qt?


person Yrchgrchh    schedule 11.09.2015    source источник
comment
Ошибка очень точная, это действительно не реализовано. Вы должны создать экземпляр с фабричной функцией FromIdAsync(). Хорошо продемонстрировано в примере кода. Вы, вероятно, упадете в яму успеха намного быстрее, если вместо этого напишете немного кода на C++/CX.   -  person Hans Passant    schedule 11.09.2015
comment
@HansPassant Qt настоятельно рекомендует использовать WRL. И я не нашел никакой информации о том, как использовать C++/CX и API без пространства имен ABI в приложении Qt. Можно ли добиться этого с помощью WRL?   -  person Yrchgrchh    schedule 11.09.2015
comment
@HansPassant Я имею в виду, что для вызова FromIdAsync мне нужно активировать интерфейс IWifiDirectDeviceStatic, который также возвращает мне E_NOTIMPL. А у меня в windows.devices.wifidirect.h заводов нет   -  person Yrchgrchh    schedule 11.09.2015
comment
@HansPassant Спасибо, переход на C++/CX помог.   -  person Yrchgrchh    schedule 14.09.2015


Ответы (1)


Попробую ответить сам, хотя не уверен на 100%.

В документации Qt говорится, что "Qt для WinRT позволяет запускать приложения Qt на устройства, поддерживающие API приложений Магазина Windows». и "Приложения WinRT работают в изолированной среде..."

Основываясь на этом, а также на том факте, что отдельный порт Qt для WinRT, который выполняет ту же работу, что и Qt для рабочего стола Windows, не имеет смысла, я могу сделать предположение, что порт Qt создает приложение Магазина Windows и использует API Магазина Windows.

Но я буду очень признателен, если кто-то подтвердит это.

person Yrchgrchh    schedule 14.09.2015
comment
Ваше предположение верно. Но большая часть кода из Qt Desktop работает без изменений в Qt WinRT. - person Hyndrix; 04.02.2016