Как активировать IWiFiDirectDevice в консольном приложении Win32 с помощью WRL?

Я хочу использовать WinRT API для WiFi Direct из Windows 10 SDK в консольном приложении Win32. Я знаю о C++/CX (и даже добился некоторого прогресса в этом направлении), но все же хочу заставить его работать без этого расширения.

Моя проблема в том, что я не могу активировать интерфейс IWifiDirectDevice (из ABI::Windows::Devices::WiFiDirect) для доступа к IWifiDirectDeviceStatics, который предоставляет метод GetDeviceSelector.

HStringReference strDevice(RuntimeClass_Windows_Devices_WiFiDirect_WiFiDirectDevice);

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

В результате этот код заканчивается E_NOTIMPL. В примере от Microsoft для активации использовались фабрики, но ABI::Windows: Пространство имен :Devices::WiFiDirect не имеет фабрик.

Стоит отметить, что IWifiDirectAdvertisementPublisher отлично работает, когда активируется так, как я писал ранее.

Итак, как активировать IWifiDirectDevice из WRL?


person Yrchgrchh    schedule 17.09.2015    source источник


Ответы (1)


Windows.Devices.WiFiDirect.WiFiDirectDevice не является активируемым классом. Вы можете убедиться в этом, взглянув на windows.devices.wifidirect.idl.

Вам нужно будет использовать статические методы, например:

HStringReference strDevice(RuntimeClass_Windows_Devices_WiFiDirect_WiFiDirectDevice);

ComPtr<IWiFiDirectDeviceStatics> wiFiDirectDeviceStatics;
hr = Windows::Foundation::GetActivationFactory(
    strDevice.Get(),
    &wiFiDirectDeviceStatics);

ComPtr<IWiFiDirectDevice> wiFiDirectDevice;
ComPtr<IAsyncOperation<WiFiDirectDevice*>> asyncOperation;
hr = wiFiDirectDeviceStatics->FromIdAsync(deviceId.Get(), &asyncOperation);

Взгляните на пример Wi-Fi Direct. .

person kiewic    schedule 17.09.2015
comment
Это настолько неясно (я имею в виду API), что для инициализации WiFiDirectDeviceStatic мне нужно передать его в GetActivationFactory... Я предположил, что GetActivationFactory должен создать фабрику... - person Yrchgrchh; 17.09.2015
comment
@Yrchgrchh Да, это сбивает с толку. Извини. GetActivationFactory на самом деле является GetStaticStuff, но идея заключалась в том, что большую часть времени вы получаете фабрику, поэтому они назвали ее в честь того, для чего ее будет использовать большинство людей. - person Raymond Chen; 17.09.2015