如何使用WRL在Win32 Console APP中激活IWiFiDirectDevice?

时间:2015-09-17 12:30:20

标签: windows-runtime wifi-direct wrl

我想在Win32控制台应用程序中使用WinRT API从Windows 10 SDK中获取WiFi Direct。我知道C ++ / CX(甚至以这种方式取得了一些进展),但仍希望在没有此扩展的情况下使其工作。

我的问题是我无法激活IWifiDirectDevice接口(来自ABI :: Windows :: Devices :: WiFiDirect)来访问提供GetDeviceSelector方法的IWifiDirectDeviceStatics。

HStringReference strDevice(RuntimeClass_Windows_Devices_WiFiDirect_WiFiDirectDevice);

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

此代码最终以E_NOTIMPL结束。在Microsoft的example中,他们使用工厂进行激活,但ABI :: Windows :: Devices :: WiFiDirect命名空间没有工厂。

值得一提的是IWifiDirectAdvertisementPublisher在我之前写的方式激活时效果很好。

那么如何从WRL激活IWifiDirectDevice?

1 个答案:

答案 0 :(得分:3)

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 sample