我想在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?
答案 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。